首页  >  文章  >  后端开发  >  为什么 Python 3 字典键排序是非确定性的?

为什么 Python 3 字典键排序是非确定性的?

Barbara Streisand
Barbara Streisand原创
2024-10-21 15:07:301000浏览

Why Is Python 3 Dictionary Key Ordering Non-Deterministic?

Python 3 中字典键的非确定性排序

在 Python 2 中,字典键的顺序是一致的,但不能保证。然而,在 Python 3 中,从 vars() 等函数获取的字典键的顺序似乎是不确定的。

非确定性的原因

此更改是归因于 Python 3.3 中实施的安全修复。为了防止哈希值可预测,在哈希计算中使用随机种子。这种随机化会导致字典键的顺序不可预测。

在 Python 3.6 及更高版本中保留顺序

在 Python 3.6 中,引入了一种新的字典实现,它保留了默认插入顺序。从 Python 3.7 开始,Python 语言规范保证了此行为。

反转非确定性

要禁用哈希随机化并恢复到以前的行为,请设置PYTHONHASHSEED 环境变量设置为 0。但是,请注意,出于安全原因,不建议这样做。

异常:设置键

与字典不同,Python 中的集合始终维护插入顺序,无论 Python 版本如何。

示例:一致的字典键排序

虽然字典键在 Python 3.3 中是不确定的,但使用集合将字典键转换为字符串保留顺序。例如:

<code class="python">set([str(i): i for i in range(10)].keys())</code>

这将始终返回列表 ['0', '1', '2', '3', '4', '5', '6', '7' , '8', '9'].

其他信息

有关哈希随机化的更多详细信息,请参阅 object.__hash__() 文档。

以上是为什么 Python 3 字典键排序是非确定性的?的详细内容。更多信息请关注PHP中文网其他相关文章!

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