首页 >后端开发 >Python教程 >Python 字典在 3.6 中保证保持插入顺序吗?

Python 字典在 3.6 中保证保持插入顺序吗?

Patricia Arquette
Patricia Arquette原创
2024-12-20 19:37:14999浏览

Are Python Dictionaries Guaranteed to Maintain Insertion Order in 3.6 ?

Python 3.6 中的字典是有序的吗?

从 Python 3.6 开始,CPython 实现中的字典是插入有序的,这意味着它们保留顺序插入的项目数。但是,此行为被视为实现细节,不应依赖。

Python 3.7 中的保证插入顺序

在 Python 3.7 中,字典的插入顺序成为保证语言功能。这意味着所有符合标准的 Python 实现都必须提供插入排序字典。

插入排序的性能改进

Python 3.6 中的新字典实现通过维护两个来实现插入排序arrays:

  • dk_entries:按顺序保存键和值条目
  • dk_indices:将索引存储到 dk_entries 中,充当哈希表。

此设计通过仅存储所需的条目并使用稀疏索引数组来减少内存开销。之前的实现分配了键和值条目的稀疏数组,导致出现空格。

数据结构可视化

例如字典 { 'timmy': ' red', 'barry': 'green', 'guido': 'blue' } 已存储如:

indices = [None, 1, None, None, None, 0, None, 2]
entries = [[-9092791511155847987, 'timmy', 'red'],
           [-8522787127447073495, 'barry', 'green'],
           [-6480567542315338377, 'guido', 'blue']]

在旧的设计中,会有大量的空白空间以尽量减少碰撞。新方法通过将稀疏性移至索引数组来减少内存使用量。

总之,Python 3.6 字典中的插入顺序是一项重大改进,它提高了内存效率,并使字典在 Python 实现中更加可靠。

以上是Python 字典在 3.6 中保证保持插入顺序吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn