新手问题:为了使一个对象成为一个关键,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}
Run Code Online (Sandbox Code Playgroud)
你的类继承object.__eq__并且object.__hash__通过身份工作.哈希并不直接关注可变性; 它只关心影响==比较的可变性.如果==是同一性,没有突变会影响==比较.
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |