因此,我在玩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)))上getsizeof(range(100))是1016、872和getsizeof([i for i in range(100)])920。所有类型都具有list。