Python - 关于哈希和"无"的问题

oro*_*aki 4 python

为什么Nonehash to -1042159082(我发现它等于Gigabyte中的字节数否定)?

我意识到这并没有真正影响我的代码,但我很好奇.

哈希用于字典键查找,所以我决定尝试:

>>> D = {-1042159082: 'Hello', None: 'Hi'}
>>> D[None]
'Hi'
>>> D[-1042159082]
'Hello'
>>>
Run Code Online (Sandbox Code Playgroud)

我理解这是因为Python看到两个相同的哈希,然后检查类型以查看它是什么.是对的吗?

>>> {False: 'Hello', 0: 'Hi'}
{False: 'Hi'}
>>> {0: 'Hi', False: 'Hello'}
{0: 'Hello'}
Run Code Online (Sandbox Code Playgroud)

这很奇怪.更重要的是保留第一个键,保留第二个键.

这是巫术,还是有人能帮助我理解?

Abb*_*fei 6

传递给内置hash()函数时(None以及-1042159082在提出的问题中)可能产生相同输出的大约2个值:

这称为冲突(有关冲突的更多信息,请参阅Wikipedia上的页面).

Python使用的散列算法有一种特殊的方法可以确定出现冲突时人们真正想要的值(从第51行开始,请参阅CPython源代码中的页面(主要的Python解释器),了解有关冲突的信息对于dicts,在撰写本答案时; 文件还记录了如何实现dicts).

关于会发生什么0False(以及更有用的信息),请参阅当前问题的其他答案.