我读过关于实现compact dicts的Raymond Hettinger's new method。这解释了为什么python3.6中的dict比python2.7-3.5中的dict占用更少的内存。不过,Python2.7和3.3-3.5 dicts中使用的内存似乎有所不同。测试代码:
import sys
d = {i: i for i in range(n)}
print(sys.getsizeof(d))
如前所述,我了解3.5到3.6之间的节省,但我很好奇2.7到3.5之间节省的原因。在
原来这是一条红鲱鱼。增加dict大小的规则在cpython2.7-3.2和cpython3.3之间发生了变化,在cpython3.4中又发生了变化(尽管这种变化只适用于删除发生时)。我们可以使用以下代码来确定dict扩展的时间:
Python 2.7:
^{pr2}$Python 3.5
Python 3.6:
请记住,dict在达到2/3满时会调整大小,我们可以看到cpython2.7dict实现在扩展时的大小是原来的四倍,而cpython3.5/3.6dict实现的大小只有原来的两倍。在
这在dict source code中的注释中解释:
相关问题 更多 >
编程相关推荐