그래서 나는 list
물건 을 가지고 놀고 있었고 그것 list
으로 만들어 지면 list()
목록 이해보다 더 많은 메모리를 사용 한다는 이상한 점을 발견 했습니까? Python 3.5.2를 사용하고 있습니다.
In [1]: import sys
In [2]: a = list(range(100))
In [3]: sys.getsizeof(a)
Out[3]: 1008
In [4]: b = [i for i in range(100)]
In [5]: sys.getsizeof(b)
Out[5]: 912
In [6]: type(a) == type(b)
Out[6]: True
In [7]: a == b
Out[7]: True
In [8]: sys.getsizeof(list(b))
Out[8]: 1008
로부터 문서 :
목록은 여러 가지 방법으로 구성 될 수 있습니다.
- 대괄호 쌍을 사용하여 빈 목록 표시 :
[]
- 대괄호를 사용하여 항목을 쉼표로 구분 :
[a]
,[a, b, c]
- 목록 이해력 사용 :
[x for x in iterable]
- 유형 생성자 사용 :
list()
또는list(iterable)
그러나 그것을 사용 list()
하면 더 많은 메모리 를 사용하는 것 같습니다 .
그리고 list
많을수록 격차가 커집니다.
왜 이런 일이 발생합니까?
업데이트 # 1
Python 3.6.0b2로 테스트합니다.
Python 3.6.0b2 (default, Oct 11 2016, 11:52:53)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getsizeof(list(range(100)))
1008
>>> sys.getsizeof([i for i in range(100)])
912
업데이트 # 2
Python 2.7.12로 테스트 :
Python 2.7.12 (default, Jul 1 2016, 15:12:24)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getsizeof(list(xrange(100)))
1016
>>> sys.getsizeof([i for i in xrange(100)])
920
sys.getsizeof(list(range(100)))
에서 1016,getsizeof(range(100))
872,getsizeof([i for i in range(100)])
920입니다. 모두 유형이list
.