首页  >  文章  >  后端开发  >  Python 中的字典排序何时变得非确定性?

Python 中的字典排序何时变得非确定性?

Patricia Arquette
Patricia Arquette原创
2024-10-21 15:09:02525浏览

When Did Dictionary Ordering in Python Become Non-Deterministic?

Python 中的非确定性字典排序:解释

Python 中的字典排序在版本 2.7 和 3.3 之间发生了重大变化。在Python 2.7中,字典键的顺序保持一致且任意,而在Python 3.3中,顺序变得不可预测。这种非确定性引发了关于其根本原因及其如何影响 Python 字典行为的问题。

非确定性的来源

非确定性本质Python 3.3 中字典排序的功能源于 2012 年实施的安全修复,在 Python 3.3 中默认激活。此安全措施引入了“哈希随机化”,该过程使字典的迭代顺序不可预测,以防止安全漏洞。

哈希随机化的说明

哈希随机化涉及更改用于确定字典中元素位置的哈希函数。通过更改哈希函数,存储和检索密钥的顺序变得不可预测,并且在不同的 Python 运行中会有所不同。这种增加的不可预测性层使恶意行为者更难利用可预测的哈希函数,从而增强了 Python 应用程序的安全性。

对字典排序的影响

引入哈希随机化对字典键的排序有重要影响。依赖字典键排序的应用程序可能会在 Python 3.3 及后续版本中遇到意外行为。例如,使用 vars() 显示变量的顺序可能会因运行而异。

选择案例中的一致排序

尽管 Python 中的排序是不确定的3.3,某些情况下仍然表现出一致的排序。例如,使用列表理解构造的字典中键的顺序仍然是可预测的,因为原始列表中键的顺序被保留。

禁用哈希随机化(可选)

在受哈希随机化影响的旧版 Python 中,可以通过将 PYTHONHASHSEED 环境变量设置为 0 来禁用它。但是,不建议这样做,因为它会降低哈希随机化的安全优势。

未来更新

在 Python 3.6 中,引入了 dict 的新实现,可以保留插入顺序。此外,在 Python 3.7 中,这种顺序保留行为得到了保证,从而确保这些版本及更高版本中字典顺序的一致性。

以上是Python 中的字典排序何时变得非确定性?的详细内容。更多信息请关注PHP中文网其他相关文章!

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