【发布时间】:2016-07-12 10:52:44
【问题描述】:
我有以下代码,我不明白这背后的场景,请任何人解释一下。
import sys
data={}
print sys.getsizeof(data)
######output is 280
data={ 1:2,2:1,3:2,4:5,5:5,6:6,7:7,8:8,9:9,0:0,11:11,12:12,13:13,14:14,15:15}
print sys.getsizeof(data)
######output is 1816
data={1:2,2:1,3:2,4:5,5:5,6:6,7:7,8:8,9:9,0:0,11:11,12:12,13:13,14:14,15:15,16:16}
print sys.getsizeof(data)
##### output is 1048
如果我们增加字典的长度,那么它应该增加内存的大小,但它会减少为什么?
【问题讨论】:
-
在我的机器上不是这样的,你能不能在终端上测试一下!
-
请注意,这仅在创建新字典时有效,例如,如果您对第二个字典执行
data[16] = 16,则大小仍为 1816。sys.getsizeof返回对象的大小,而不是它包含的对象。此外,最后一个 dict 的大小比第二个小的原因与 Python 中的哈希表有关。较小的字典会导致更多的冲突,所以我想这与它有关。我敦促您查看Brandon Rhodes' talk "The mighty dictionary",以获得更深入的解释。 -
我在 ipython (mac 64 bit) 上做过这个
-
我注意到,当 len(data)=22 内存大小变为 3352 时,len(data)=32 内存大小再次减小并变为 1816,每 10 个元素间隔其减小和增加的倍数1536 所以当 len(data)=42 然后 6424 ,即 3352+1536*2 。但仍然没有找到正确的场景,为什么这是由 python 遵循的。
标签: python python-2.7