【发布时间】:2018-04-26 00:05:19
【问题描述】:
新手问题:为了将对象用作dict 中的键,它需要是可散列的。很明显,不可变类型可以用作键,而可变类型不能。但是,如果我定义一个可变的类,显然它仍然可以用作键。在下面的代码中my_obj 是对包含RandomObject 类型对象的内存槽的引用。该内存插槽包含对 25 的引用 (x),但此引用可以更改为指向其他任何内容。这让我很困惑,为什么它会起作用?此外,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}
【问题讨论】:
标签: python python-3.x