Python字典和设置内存分配

问题描述 投票:0回答:1

我发现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+)

python python-3.x memory memory-management
1个回答
2
投票

在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.
 */

书中提供的信息在发表时已经过时了大约两年。

© www.soinside.com 2019 - 2024. All rights reserved.