我有以下问题,最好通过以下示例来说明:
class TestHasher:
def __hash__(self):
# return the hash of the name of the class of this instance
# which is "TstHasher"
return hash(self.__class__.__name__)
th = TestHasher()
print(hash(th))
print(hash("TestHasher"))
# prints the same result as hash(th)
# -> the hash value for th and "TestHasher" are the same, everything worked so far
d = {"TestHasher": "it worked!"}
print(d[th])
最后一行使脚本崩溃,并给了我一个KeyError。
我在这里错过了什么吗?这不行吗?
除了调用已传递密钥的 hash 方法之外,dict查询是否还会添加另一个“过滤器”吗?
编辑:
经过进一步的研究(请参见Duncan关于这个问题的答案:How can Python dict have multiple keys with same hash?),在我看来python认为这是哈希冲突,因此采取了相应的行动。有什么方法可以避免这种情况,以便使用键th和“ TestHasher”调用d返回相同的对象?