gpt4 book ai didi

python - 迭代相同的 freezeset 是否保证始终以相同的顺序生成项目? (Python 3)

转载 作者:行者123 更新时间:2023-11-30 22:06:17 26 4
gpt4 key购买 nike

例如,当我执行 frozen = freezeset(('kay', 'snow queen')) ,然后执行 tuple(frozen) 时,我得到 ('凯','雪之女王')。 (何时/如何)iter(frozen) 是否有可能(如果有的话)以不同的顺序生成项目? (何时/如何)tuple(frozen) 将返回 ('snow queen', 'kay')

我几乎一直在使用 Python 3,但我也对 Python 2 感到好奇。

最佳答案

默认情况下,str 对象的哈希值会使用不可预测的随机值进行加盐处理。尽管它们在单个 Python 进程中保持不变,但在 Python 的重复调用之间它们是不可预测的。更改哈希值会影响集合的迭代顺序。

因此,当哈希随机化打开时,您将以不同的顺序获得项目:

$ for i in {1..10}; do python3 -c "frozen = frozenset(('kay', 'snow queen')); print(list(frozen))"; done
['snow queen', 'kay']
['snow queen', 'kay']
['snow queen', 'kay']
['snow queen', 'kay']
['kay', 'snow queen']
['kay', 'snow queen']
['snow queen', 'kay']
['kay', 'snow queen']
['snow queen', 'kay']
['snow queen', 'kay']

如果您disable it ,您将得到一个可重复但任意的顺序:

$ export PYTHONHASHSEED=0
$ for i in {1..10}; do python3 -c "frozen = frozenset(('kay', 'snow queen')); print(list(frozen))"; done
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']
['kay', 'snow queen']

自 Python 3.3 起,哈希随机化默认启用为 workaround a security vulnerability .

另请参阅:the -R switch to the interpreter .

关于python - 迭代相同的 freezeset 是否保证始终以相同的顺序生成项目? (Python 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com