首页 > 后端开发 > Python教程 > Python 3.6 字典实现如何提高内存使用并保留插入顺序?

Python 3.6 字典实现如何提高内存使用并保留插入顺序?

Mary-Kate Olsen
发布: 2025-01-02 18:04:39
原创
710 人浏览过

How Does Python 3.6  Dictionary Implementation Improve Memory Usage and Preserve Insertion Order?

Python 3.6:字典保留插入顺序

从 Python 3.6 开始,CPython 实现中的字典表现出插入顺序,这与以前的版本有很大不同。此功能现已成为 Python 3.7 中保证的语言功能。

改进的内存使用和性能

与之前相比,新的字典实现显着减少了 20-25% 的内存使用Python 3.5。此改进源于实现中使用单独的数组:

  • dk_entries: 按插入顺序存储条目 (PyDictKeyEntry)。
  • dk_indices: 在 dk_entries 中存储条目的索引,充当散列table.

之前需要分配PyDictKeyEntry类型的稀疏数组,出于性能考虑导致空间浪费。新方法仅分配必要的条目,并采用 intX_t 类型的稀疏数组,这会消耗更少的内存。

使用的数据结构

最初,字典存储为 [ keyhash, key, value] 位于稀疏数组中,其中空条目用“--”表示。新方法将数据组织为:

  • 索引: [None, 1, None, None, None, 0, None, 2]
  • 条目: [[-9092791511155847987, 'timmy', 'red'],

            [-8522787127447073495, 'barry', 'green'],
            [-6480567542315338377, 'guido', 'blue']]
    
    登录后复制

这个修改后的结构显着减少了内存开销。

插入的好处排序

虽然新的字典实现主要关注内存优化,但插入排序功能具有方便的应用:

  • 保留对象添加到对象的顺序字典。
  • 自定义字典的显示或迭代顺序

需要注意的是,在不同的 Python 实现或未来的语言版本中,不能保证插入顺序。然而,在 Python 3.7 及更高版本中,这是一个值得您信赖的有保证的功能。

以上是Python 3.6 字典实现如何提高内存使用并保留插入顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板