a = [0] 和 a = [i for i in range(1)] 之间的 sizeof 差异
Difference in sizeof between a = [0] and a = [i for i in range(1)]
我使用相同的元素以两种不同的方式创建了两个单独的列表 a
和 b
。为什么两个列表的大小不同?
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
当解释器看到 a = [0]
时,它知道它可以构建一个只有一个元素的列表。
当它进行列表理解时,它首先创建一个空列表,然后在进行时追加项目。它事先并不知道列表有多大,即使它正在迭代 range(1)
这样简单的东西。所以它会尝试猜测要分配多少内存,如果发现不够,就必须动态增加内存分配。那可不便宜,不妨从大手笔的猜测入手。
我使用相同的元素以两种不同的方式创建了两个单独的列表 a
和 b
。为什么两个列表的大小不同?
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
当解释器看到 a = [0]
时,它知道它可以构建一个只有一个元素的列表。
当它进行列表理解时,它首先创建一个空列表,然后在进行时追加项目。它事先并不知道列表有多大,即使它正在迭代 range(1)
这样简单的东西。所以它会尝试猜测要分配多少内存,如果发现不够,就必须动态增加内存分配。那可不便宜,不妨从大手笔的猜测入手。