day30 __hash__ 計算雜湊值
阿新 • • 發佈:2018-11-10
hash() # __hash__
雜湊的時候會根據記憶體地址進行雜湊,因為地址不同所以雜湊的值也不同,哪怕是完全一樣子的屬性得出的雜湊值也不一樣
因此存在需要某些時刻期望屬性相同得出相同雜湊值
可以控制物件的雜湊值是否相等,或者規定改變
1 class B: 2 def __init__(self,name,sex): 3 self.name = name 4 self.sex = sex 5 a = B("yangtuo","tiancai") 6 b = B("yangtuo","tiancai") 7 # 預設是雜湊記憶體地址 8print(a) # <__main__.B object at 0x000000000251D240> 9 print(b) # <__main__.B object at 0x000000000251D4E0> 10 print(hash(a)==hash(b)) # False
11 class A: 12 def __init__(self,name,sex): 13 self.name = name 14 self.sex = sex 15 def __hash__(self): 16 return hash(self.name + self.sex)17 a = A("suyang","豬") 18 b = A("suyang","豬") 19 print(hash(a)) # -7714351582186626821 20 print(hash(b)) # -7714351582186626821 21 print(hash(a)==hash(b)) # True