2012-11-25 3 views
4

list은 목록을 확장하는 데 필요한 시간을 최적화하기 위해 공간의 큰 덩어리로 초기화하는 것으로 알려져 있습니다 (평균적으로 배열과 같은 새 목록을 만들 필요가 없습니다).파이썬은 목록보다 공간을 효율적으로 설정합니까?

set?

list 때문에 다음과 같은 구조로 인해 공간이 낭비됩니다. tuple은 불변이므로 더 많은 공간을 절약 할 수 있음을 이해합니다. set과 동일하게 변경할 수 있습니까?

set([ 1, 2, 3])

답변

9
>>> from sys import getsizeof as size 
>>> s = set(xrange(100)) 
>>> l = list(xrange(100)) 
>>> size(s) 
8424 
>>> size(l) 
1016 

setlist의보다 메모리를 차지합니다. set이 제공하는 기능 중 일부는 더 많은 메모리 (예 : 빠른 멤버십 테스트)가 필요합니다.

+0

재미 있습니다. 어떤 이유로 든 더 많은 것을 지켜야하는 것처럼 보입니다. – User007

+2

[PySetObject] (https://github.com/schmir/python/blob/2.7/Include/setobject.h#L34) 대 [PyListObject] (https://github.com/schmir/python/blob/2.7) /Include/listobject.h#L22) – soulseekah

+0

빠른 (아마도 로그) 멤버십 테스트를 얻으려면 더 많은 메모리가 필요합니다. 목록에있는 회원 테스트는 분명히 시간에 선형입니다. – liori