这可能是微不足道的,但我不确定我是否理解,我尝试谷歌搜索但没有找到令人信服的答案。
>>> sys.getsizeof({})
140
>>> sys.getsizeof({'Hello':'World'})
140
>>>
>>> yet_another_dict = {}
>>> for i in xrange(5000):
yet_another_dict[i] = i**2
>>>
>>> sys.getsizeof(yet_another_dict)
98444
我怎么理解这个? 为什么空字典的大小与非空字典的大小相同?
最佳答案
有两个原因:
字典只保存对对象的引用,而不是对象本身,因此它的大小与其包含的对象的大小无关,而是与字典包含的引用(项目)的数量相关。
更重要的是,字典为 block 中的引用预先分配内存。因此,当您创建字典时,它已经为第一个
n
引用预分配了内存。当它填满内存时,它会预先分配一个新 block 。
您可以观察该行为,运行下一段代码。
d = {}
size = sys.getsizeof(d)
print size
i = 0
j = 0
while i < 3:
d[j] = j
j += 1
new_size = sys.getsizeof(d)
if size != new_size:
print new_size
size = new_size
i += 1
打印出来的:
280
1048
3352
12568
在我的机器上,但这取决于架构(32 位、64 位)。
关于python - 为什么空字典的大小与 Python 中非空字典的大小相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18558865/