我发现this excellent resource讨论了python词典和集合的内存使用情况,具体来说:
默认情况下,字典或集合的最小大小为8(即,如果您只记录3个值,则python仍将分配8个元素)。在调整大小时,桶的数量增加4倍,直到我们达到50,000个元素,之后大小增加2倍。这给出了以下可能的尺寸,
16, 64, 256, 1024, 4096, 16384, 65536, 131072, 262144, ...
值得注意的是,调整大小可能会使哈希表更大或更小。也就是说,如果删除了足够多的散列表元素,则可以缩小表的大小。这是因为表的考虑为2 / 3rds full,使用自上次调整大小以来插入和删除的条目总数。但是,仅在插入期间进行调整大小。
但这是在2014年9月发布的,因此很可能在此之前写了一段时间。这在最新版本的Python中仍然准确且相关吗? (3.6+)
在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.
*/
书中提供的信息在发表时已经过时了大约两年。