首页 >后端开发 >Python教程 >为什么 Python 2.7 和 3.3 之间的字典排序行为发生变化,以及后来如何演变?

为什么 Python 2.7 和 3.3 之间的字典排序行为发生变化,以及后来如何演变?

DDD
DDD原创
2024-10-21 15:22:301069浏览

Why Did the Dictionary Ordering Behavior Change Between Python 2.7 and 3.3, and How Did It Evolve Later?

Python 2.7 与 Python 3.3 中的字典排序:为什么会发生变化?

在 Python 2.7 中,字典键的排序是任意但一致的。然而,这种行为在 Python 3.3 中发生了变化,从 vars() 等方法获取的键的顺序似乎是不确定的。

这种不确定性源于 2012 年实现的安全修复,该修复默认启用在Python 3.3中。该修复引入了哈希随机化以防止某些安全漏洞。结果,字典和集合的迭代顺序变得不可预测。

在 Python 3.6 中,引入了 dict 类的新实现来保留插入顺序。因此,从 Python 3.7 开始,字典的顺序保留行为现在得到了保证。

某些用例中的意外一致性

尽管排序是不确定的,但仍有维持一致秩序的情况。例如:

list({str(i): i for i in range(10)}.keys())

在 Python 2.7 和 Python 3.6(及更高版本)中,此表达式始终生成顺序:

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

这是因为反例使用集合理解,其中创建一个隐式有序字典。然而,在 Python 3.3 中,由于处理哈希冲突的限制,顺序可能仍然会有所不同。

以上是为什么 Python 2.7 和 3.3 之间的字典排序行为发生变化,以及后来如何演变?的详细内容。更多信息请关注PHP中文网其他相关文章!

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