[英]why are custom objects hashable (and usable in dict) in python?
新手問題:為了將對象用作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__
,它們通過身份工作。 哈希並不直接關注可變性; 它只關心影響==
比較的可變性。 當==
是通過身份時,沒有突變會影響==
比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.