hashlib - 为什么摘要匹配但是裸对象不匹配?

Dea*_*ado 3 python md5 hashlib

我想知道在python 2.7中观察到的行为的实际原因是什么:

import hashlib
hashlib.md5('foo') == hashlib.md5('foo')
Run Code Online (Sandbox Code Playgroud)

返回false.但...

import hashlib
hashlib.md5('foo').hexdigest() == hashlib.md5('foo').hexdigest()
Run Code Online (Sandbox Code Playgroud)

返回true.我知道hexdigest/digest返回最后的字符串表示,但由于直接将相同的数据输入到两个哈希对象中,它们不应该评估为彼此相等吗?md5 HASH__eq__调用魔法时,对象是否不会意识到内部身份?对象本身会以什么理由评估不平等?真的很好奇.

JBe*_*rdo 6

hashlib.md5对象没有相等比较,因为它们是不同的对象,结果是错误的.

.hexdigest方法生成一个字符串(如果您使用的是Python 3,则生成字节串),并且可以比较字符串.

BTW:

x = hashlib.md5('foo')
x == x # is True because it's the same object
Run Code Online (Sandbox Code Playgroud)