爲什麼None
哈希-1042159082
(我發現等於字節數在技嘉否定)?Python的 - 大約哈希和問題`None`
我知道這並沒有真正影響我的代碼,但我很好奇。
哈希值是用於字典鍵查找窗口,所以我決定嘗試:
>>> D = {-1042159082: 'Hello', None: 'Hi'}
>>> D[None]
'Hi'
>>> D[-1042159082]
'Hello'
>>>
我明白這是Python的看到兩個相同的哈希值,然後檢查類型,看看什麼是什麼。是對的嗎?
>>> {False: 'Hello', 0: 'Hi'}
{False: 'Hi'}
>>> {0: 'Hi', False: 'Hello'}
{0: 'Hello'}
這很奇怪。更重要的是,第一個鍵被保留,第二個值被保留。
這是巫術,或者可能有人幫助我明白了嗎?
這一切都是真實的,但請記住,在OP的示例中不存在哈希碰撞:它是* same *鍵值。在Python中,False等於整數0. – 2011-03-27 06:38:45
Ned Deily:謝謝,澄清了答案即將回答的關於碰撞的答案部分。 – Abbafei 2011-03-27 06:48:17
@Ned - 你說錯了。 'None'散列到被重用爲另一個鍵的同一個負整數,但兩個鍵都保留在字典中。這與'False':'0'例子不一致,其中相同的行爲導致了不同的結果。 @阿不菲,謝謝你的正確答案。我研究了源代碼C,看到與'Py_None'有關的條件是非常有趣的。 – orokusaki 2011-03-27 18:22:48