I found 这个优秀的资源 https://www.safaribooksonline.com/library/view/high-performance-python/9781449361747/ch04.html讨论 python 字典和集合的内存使用情况,具体来说:
默认情况下,字典或集合的最小大小为 8(也就是说,如果您只存储 3 个值,Python 仍会分配 8 个元素)。调整大小时,存储桶的数量会增加 4 倍,直到达到 50,000 个元素,之后大小会增加 2 倍。这给出了以下可能的尺寸,
16, 64, 256, 1024, 4096, 16384, 65536, 131072, 262144, ...
需要注意的是,调整大小可能会使哈希表变大或变小。也就是说,如果删除哈希表中足够多的元素,则可以缩小该表的大小。这是因为考虑到表已满 2/3,使用了自上次调整大小以来插入和删除的条目总数。但是,调整大小仅在插入期间发生。
但这篇文章发表于 2014 年 9 月,因此很可能是在此之前的某个时间写的。这在最新版本的 Python 中仍然准确且相关吗? (3.6+)
在 CPython 中,情况不再如此。自从那里写的内容以来,字典实现的这个特定部分已经改变了几次。评论开始于这条线 https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Objects/dictobject.c#L398就在定义之上GROWTH_FACTOR
提供了一些历史。
/* GROWTH_RATE. Growth rate upon hitting maximum load.
* Currently set to used*3.
* This means that dicts double in size when growing without deletions,
* but have more head room when the number of deletions is on a par with the
* number of insertions. See also bpo-17563 and bpo-33205.
*
* GROWTH_RATE was set to used*4 up to version 3.2.
* GROWTH_RATE was set to used*2 in version 3.3.0
* GROWTH_RATE was set to used*2 + capacity/2 in 3.4.0-3.6.0.
*/
书中提供的信息在出版时已经过时了大约两年。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)