根據我的理解,Python用戶定義的類實例在默認情況下是不可變的。不可變對象不會改變它們的散列值,它們可以用作字典鍵和元素。Python 3用戶定義的不可變類對象
我有下面的代碼片段。
class Person(object):
def __init__(self, name, age):
self.name=name
self.age=age
現在,我將實例化Person類並創建一個對象並打印它的散列值。
jane = Person('Jane', 29)
print(jane.__hash__())
-9223371933914849101
現在,我將改變jane對象並打印它的散列值。
jane.age = 33
print(jane.__hash__())
-9223371933914849101
我的問題是,即使jane對象是可變的,爲什麼它的哈希值沒有改變?
另外,我可以使用可變jane對象作爲dict鍵和set元素。
「按我的理解,Python的用戶定義的類實例是默認不可改變」 - 相反,用戶定義類的實例默認是可變的,並且試圖使它們不可變是相當混亂的。 – user2357112
@ user2357112可以猴子補丁類,所以我很確定類實例是可變的。請參閱http://stackoverflow.com/questions/5626193/what-is-a-monkey-patch – Mai
@Mai:當然,你可以猴子補丁類,但是否這種計數作爲突變他們的實例是爭論。在任何情況下,您都可以通過使用Cython編寫它們或直接使用C API來獲得大多數不可猴子可修補的類,並且即使沒有通過從內置類繼承來將C帶入圖片也可以獲得大多數不可變的實例使用不可變實例並設置__slots__ =()來禁用實例__dict__'的創建。 – user2357112