我想知道什麼實際的原因存在所觀察到的行爲在Python 2.7:hashlib - 爲什麼摘要匹配,但裸露的對象沒有?
import hashlib
hashlib.md5('foo') == hashlib.md5('foo')
返回false。但是...
import hashlib
hashlib.md5('foo').hexdigest() == hashlib.md5('foo').hexdigest()
返回true。我知道hexdigest/digest返回最終的字符串表示,但是由於直接將相同的數據輸入到兩個哈希對象中,它們不應該彼此相等嗎?當魔術__eq__
方法被調用時,md5 HASH
對象不會知道內部身份嗎?物體本身評估不平等的原因是什麼?真的只是好奇。
hashlib.md5('foo')是一個對象,與它的編號 – PasteBT
至於_why_他們沒有定義'__eq__' ...好吧,比較t的有效情況當你希望比較它們的散列_strings_時,它將不會被計算出來,直到你調用'hexdigest()'...所以你可以直接比較這些摘要。 – voithos
不支持比較哈希對象的內部中間狀態。當然,可以實現一個__eq__方法,它可以在後臺調用digest()來做到這一點,但看起來並不值得。如果你想比較兩件事情是否相同,使用摘要或十六進制方法自己完成散列比較。 – gps