问题描述
我找到了讨论python字典和集合的内存使用情况的 ,特别是:
默认情况下,字典或集合的最小大小为8(也就是说,如果您只讲故事3个值,python仍将分配8个元素)。 调整大小时,存储桶数增加4倍,直到达到50,000个元素,此后大小增加2倍。 这提供了以下可能的尺寸,
16,64,256,1024,4096,16384,65536,131072,262144,...
重要的是要注意,调整大小可能会使哈希表变大或变小。 也就是说,如果删除了哈希表中足够多的元素,则可以按比例缩小该表的大小。 这是因为考虑到表已满2 / 3rd,所以使用了自上次调整大小以来插入和删除的条目的总数。 但是,调整大小仅在插入期间发生。
但这本书于2014年9月发布,因此可能在此之前写了一段时间。 在最新版本的Python中,这仍然准确且相关吗? (3.6+)
1楼
在CPython中,这不再成立。
自从编写了这种情况以来,字典实现的这一特定部分已经更改了两次。
在上方GROWTH_FACTOR
定义上方的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.
*/
该书提供的信息在出版时已经过时了大约两年。