Python 3.5 和 3.6 版本的 dict 实现有什么不同?


Python 3.5 和 3.6 版本的 dict 实现有什么不同?

1 回复

Python 3.6 中 dict 的实现从 3.5 及之前版本的“乱序”变成了“按插入顺序保存键值对”。这是一个重大的内部实现变更。

在 3.5 及之前,dict 的底层结构是一个稀疏的哈希表,条目顺序由哈希冲突解决算法和插入/删除历史决定,看起来是随机的。从 3.6 开始,Python 采用了一种更紧凑的存储结构:一个按插入顺序排列的密集条目数组(PyDictKeyEntry),外加一个稀疏的哈希索引表。新插入的键值对会追加到条目数组末尾,迭代时直接遍历这个密集数组,自然就是插入顺序。

这个改变带来的好处很明显:内存使用更高效(紧凑结构减少了开销),并且迭代速度更快(遍历连续内存)。更重要的是,它让 dict 有了可靠的顺序,这直接为 Python 3.7 将“插入顺序”确定为语言规范铺平了道路。

简单来说,3.6 是内部实现变得有序的版本,3.7 是将这个行为正式写进语言标准。

一句话建议: 如果你依赖字典顺序,至少要用 Python 3.6。

回到顶部