新手问题:为了使对象用作其中的键,dict
必须是可哈希的。显然,不可变类型可以用作键,而可变类型则不能。但是,如果我定义了一个可变的类,显然它仍然可以用作键。在下面的代码中,my_obj
是对包含类型的对象的内存插槽的引用RandomObject
。该内存插槽包含x
对25的引用(),但是可以更改此引用以指向其他任何内容。这让我感到困惑,为什么行得通?此外,my_obj
可以引用的全新实例RandomObject
。如果散列发生在实际对象(而不是引用的内存地址)上,这将如何工作?
class RandomObject:
def __init__(self, x):
self._x = x
d = {"hi": 1, "bye": 2}
my_obj = RandomObject(25)
d[my_obj] = 3
print(d)
#{'hi': 1, 'bye': 2, <__main__.RandomObject object at 0x0000000005B75D30>: 3}
您的课程继承了object.__eq__
和object.__hash__
,它们通过身份进行工作。散列并不直接关心可变性;它只关心影响==
比较的可变性。当==
通过身份确认时,没有任何突变会影响==
比较。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句