【问题标题】: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.
     */
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2021-10-06
      • 2023-03-04
      • 2014-06-17
      相关资源
      最近更新 更多