2013-02-13 3 views
4

이 문자열에 그 호출 set()에서 어떤 일관성이 항상 같은 (비 alabetical) 순서로 해결하는 것 같다 것 같다, 두파이썬에서 집합의 순서가 어떻게 결정되는지 실제로 아는 사람이 있습니까?

set([1,2,3]) & set([1,2,3,4]) 

하고 뒤죽박죽 사촌 않습니다

set([2,3,1]) & set([4,3,1,2]) 

은 규칙적으로 보이는 set([1,2,3])이됩니다.

로 한편

, 더 독특한 맛이 조금 같은 같은

from random import randint 
set([randint(0,9) for x in range(3)]) 

때때로

는 ... 여기 무슨 일 것입니다 ... set([9, 6, 7]) 뭔가를 줄 것이다?

+0

http://en.wikipedia.org/wiki/Hash_table – SLaks

+0

이 스레드는 흥미로운 것 같습니다. http://stackoverflow.com/questions/3949310/how-is-cpythons-set-implemented –

+0

약간의 미성년자를했습니다. 잠시 후에 실험 해 보니 바이너리 검색 트리와 같이 바이너리 인 것으로 밝혀 졌다고 생각합니다. (해시 테이블처럼 동작 할 것으로 예상됨에 따라 여기에 끔찍한 잘못된 느낌이 들었습니다.) 당신이 관심이있을 수 있습니다 [이] (http://stackoverflow.com/q/13001913/198633) 및 [this] (http://stackoverflow.com/q/14493204/198633) – inspectorG4dget

답변

5

당신은 정렬되지 않은 컬렉션

그들은 해시 테이블에 저장됩니다으로 세트를 고려해야합니다.

또한 요소를 계속 추가하면 해시가 더 큰 테이블로 이동하므로 순서가 크게 달라질 수 있습니다.

순서가 다른 Python 버전/구현에서 동일하다는 보장은 없습니다.

+0

방금 ​​http : //bugs.python.org/issue13703 여기. 결정적 인 순서는 관련없는 구현 세부 사항이며, 중요한 것은 '집합'이 정렬되지 않는다는 것입니다. – mmgp

+0

@ mmgp, 나는 그것을 먼저 말하고 싶었지만 잊어 버렸다. –

+0

나는 또한 암시 적으로 순서가 결정 론적이라고 언급하지 말 것을 요청했다. 예를 들어, 파이썬 3.3을 시작하고'hash ('x')'를하고, 인터프리터를 종료하고 다시 시작하고,'hash ('x')'를 다시 시도하십시오. – mmgp