【问题标题】:Python dictionary and set memory allocationPython字典和设置内存分配
【发布时间】:2018-09-18 00:55:59
【问题描述】:
我发现this excellent resource 讨论了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+)
【问题讨论】:
标签:
python
python-3.x
memory
memory-management
【解决方案1】:
在 CPython 中,这不再适用。字典实现的这个特定部分已经改变了几次,因为那里写的是这种情况。以this line 开头的评论就在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.
*/
书中提供的信息在出版时已经过时了大约两年。