Ana*_*bus 3 python iterator set reliability persistent-storage
例如,当我执行frozen = frozenset(('kay', 'snow queen')),然后tuple(frozen),我得到('kay', 'snow queen')。(何时/如何)是否有可能(如果有的话)以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']
Run Code Online (Sandbox Code Playgroud)
如果禁用它,您将得到一个可重复但任意的顺序:
$ 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']
Run Code Online (Sandbox Code Playgroud)
从 Python 3.3 开始,默认启用哈希随机化以解决安全漏洞。
另请参阅:切换-R到解释器。
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |