簡體   English   中英

為什么自定義對象可以在python中進行哈希(並且在dict中可用)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM