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

DDD
发布: 2024-10-21 15:22:30
原创
973 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!