首先,
__hash__(myNewMyClassObj)被呼叫。如果在字典中找不到具有相同哈希值的对象,则Python会假定
myNewMyClassObj不在字典中。(请注意,Python要求每当
__eq__两个对象的值均相等时,它们
__hash__必须相同。)
如果
__hash__在字典中找到一些相同的对象,则
__eq__在每个对象上调用。如果
__eq__对任何一个求值均相等,则
myNewMyClassObjin dict_返回True。
因此,您只需要确保
__eq__和
__hash__都很快。
对于您的后续问题:是的,
dict_仅存储一组等效
MyClass对象(由定义
__eq__)中的一个。(按照设置。)
请注意,
__eq__仅在具有相同散列并分配给相同存储桶的对象上调用。此类对象的数量通常很少(
dict实现可确保这一点)。因此,您仍然具有(大约)
O(1)查找性能。



