2014-12-12 1 views
4

s.difference (t)에 요소가없는 새 세트를 반환합니다.Python : set.difference와 set.difference_update의 차이점은 무엇입니까?

s.difference_update t 없음 요소 업데이트 된 세트를 리턴 (t).

두 가지 설정 방법의 차이점은 무엇입니까? difference_update 업데이트가 설정되었으므로이 메서드에서 None 결과를받지 않도록주의해야합니다.

속도면에서 set.difference()와 같은 새로운 세트를 만드는 대신 set s에서 요소를 제거하기 때문에 set.difference_update가 더 빠르지 않아야합니까?

+0

용어에 관하여 :'s.difference_update (t)'는 ** 업데이트 된 집합을 반환하지 않습니다 **. 세트를 갱신합니다. 이것은 명령이 아니라 명령입니다. – Aristide

+0

'difference_update'는 아무 것도 반환하지 않으므로 반환 값을 받으면 항상'None'이됩니다. 모든 것이 제거되면's'가 빈'set'으로됩니다. –

+0

@Aristide : 용어에 관해서,'s.difference_update (t)'*는 무언가를 반환합니다 -'None' 객체 -, 그리고 *는 표현식입니다. 파이썬의 명령어는'import','def','class', for, while,'with','break','continue','return','yield','try','except'입니다. ,'finally','raise' 그리고 대입 연산자'='(아마 두 사람은 잊어 버렸을 것입니다. –

답변

4

difference_update은 새로운 세트를 반환하지 않고 제자리에서 세트를 업데이트합니다.

>>> s={1,2,3,4,5} 
>>> t={3,5} 
>>> s.difference(t) 
{1, 2, 4} 
>>> s 
{1, 2, 3, 4, 5} 
>>> s.difference_update(t) 
>>> s 
{1, 2, 4} 
11

Q.이 두 설정 방법의 차이 무엇입니까?

A. 버전은 기존의 세트를 돌연변이, 잠재적으로 그것을 원래보다 더 작은을 떠나는 뺍니다 업데이트합니다. 비 업데이트 버전은 원본 세트를 변경하지 않고 새 세트를 생성합니다.

difference_update 업데이트가 설정되었으므로이 메서드에서 None 결과를받지 않도록주의해야합니까? 파이썬에서

A. 돌연변이 방법은 일반적으로 그들이 개체 변이 된 것으로 표시하는 방법으로 없음을 반환하지 않습니다. 유일한 "예방 조치"는 없음 결과를 변수에 할당하지 않는 것입니다.

속도면에서 set.difference()와 같은 새로운 세트를 만드는 대신 set s에서 요소를 제거하기 때문에 set.difference_update가 더 빠르지 않아야합니까?

a 예, 업데이트 버전의 알고리즘은 단순히 값을 무시합니다.

대조적으로 비 업데이트 버전의 알고리즘은 세트의 크기에 따라 다릅니다.

S의 크기는 다음 t의 새로운 버전의 복사본 제 메인 세트가의 값을 무시한다는 네 배 이상 큰 경우. 따라서 "s - tn = s.copy(); n.difference_update(t)으로 구현됩니다.S

그렇지 톤보다 훨씬 큰 경우에, 그 알고리즘은 S 요소 위에 빈 새로운 N, 루프를 생성하고 추가 비 갱신 버전에 대한 알고리즘이다 사용 그 (것)들이 t에서 존재하지 않는 경우에 n에 그 (것)들이.

+1

나는 오늘 새로운 것을 배웠다! – badideas

관련 문제