为什么dict(enumerate(example))返回一个随机字典?

时间:2018-11-01 00:01:10

标签: python python-3.x enumerate

当我运行此简单程序时:

example: {'left', 'right', 'up', 'down'}
new_dict = dict(enumerate(example))
print(new_dict)

每次运行都会得到不同的(索引,值)对。例如:

MacBook-Air:Desktop mymac$ python3 example.py
{0: 'right', 1: 'down', 2: 'left', 3: 'up'}
MacBook-Air:Desktop mymac$ python3 example.py
{0: 'left', 1: 'up', 2: 'down', 3: 'right'}
MacBook-Air:Desktop mymac$ python3 example.py
{0: 'down', 1: 'left', 2: 'right', 3: 'up'}

那是为什么?

1 个答案:

答案 0 :(得分:1)

来自文档https://docs.python.org/3/reference/datamodel.html#object.hash

  

注意默认情况下,CancellablePromise__hash__()str对象的bytes值会以不可预测的随机值“成盐”。尽管它们在单个Python进程中保持不变,但在重复调用Python之间是不可预测的。

     

更改哈希值会影响字典,集合和其他映射的迭代顺序。

     

版本3.3中已更改:默认情况下,哈希随机化处于启用状态。