a = [0]和a = [i对于范围(1)中的i]的sizeof之差]

时间:2019-06-25 18:41:28

标签: python object memory memory-management sizeof

我以两种不同的方式用相同的元素创建了两个单独的列表ab。为什么两个列表的大小有区别?

import sys
a = [0]
print(a)
>>> [0]
print(sys.getsizeof(a))
>>> 72

b = [i for i in range(1)]
print(b)
>>> [0]
print(sys.getsizeof(b))
>>> 96

1 个答案:

答案 0 :(得分:2)

当解释器看到a = [0]时,便知道它可以只用一个元素构建一个列表。

在执行列表理解时,它首先创建一个空列表,然后按顺序附加项目。即使它是在诸如range(1)之类的简单事物上进行迭代,它也不预先知道列表的大小。因此,它试图猜测要分配多少内存,如果事实证明还不够,则必须动态增加内存分配。那并不便宜,所以它可以从一个宽泛的猜测开始。