Python 为什么输出在逻辑上不正确?

Python 为什么输出在逻辑上不正确?,python,Python,在下面的代码中 >>> hash('bar') 327024216814240868 >>> hash('baz') 327024216814240876 >>> hash('bar') % 8 4 >>> hash('baz') % 8 4 但是,bar和baz的散列值正好相隔8,因此映射到完全相同的插槽,4: 他们的顺序现在取决于先开槽的键;第二个键必须移动到下一个插槽: >>> {'baz': No

在下面的代码中

>>> hash('bar')
327024216814240868
>>> hash('baz')
327024216814240876
>>> hash('bar') % 8
4
>>> hash('baz') % 8
4
但是,
bar
baz
的散列值正好相隔8,因此映射到完全相同的插槽,
4

他们的顺序现在取决于先开槽的键;第二个键必须移动到下一个插槽:

>>> {'baz': None, 'bar': None}
{'bar': None, 'baz': None}
>>> {'bar': None, 'baz': None}
{'baz': None, 'bar': None}
但在这里,两个输出必须与
bar
的哈希值相同,而不是
baz

我是说,

>>>{'bar': None, 'baz': None}
应该来,

{'bar': None, 'baz': None}

从Python版本安全发行版

散列随机化导致dict和set的迭代顺序为 不可预测且在Python运行中有所不同。Python从未保证 dict或集合中键的迭代顺序,建议应用程序不要 依靠它。从历史上看,dict迭代顺序在不同的应用程序中并没有经常改变 释放,并始终保持连续执行 python因此,一些现有应用程序可能依赖dict或set排序。 由于这一点以及许多Python应用程序不接受 在所有稳定的Python版本中,不受信任的输入不易受到此攻击 这里提到,哈希随机化在默认情况下是禁用的。有两种方法可以 启用它。可以将-R命令行选项传递给python可执行文件。信息技术 也可以通过将环境变量pythonhasheed设置为 “随机”。(也可以接受其他值;将-h传递给python以完成此操作。)
(说明)

,这会有所帮助。您正在对python中的词典如何工作进行大量假设,这是建立在特定的基础上的,是针对哪个版本的python,还是您只是在猜测?请您花点时间解释一下好吗?我不明白。@不,我不是在猜测,这是即将到来的输出,我使用的是Python 2.7。10@ashishverma我在问你为什么要做%8,为什么不做%2?还是别的什么?为什么你认为应该移动现有密钥而不是新密钥?我想知道,dict随机打印,但它也有一个模式,这取决于插槽的顺序,即。,首先打印插槽1,然后打印插槽2,以此类推,但如果
bar
位于
baz
之前的插槽中,那么为什么
bar
不首先打印?Python从未保证dict或set中键的迭代顺序,建议应用程序永远不要依赖它。我站在我这边的可能是在哈希表上,他们放了任何随机函数来提取键。也许你想用像排序dict这样的东西?