3 回答

TA貢獻1995條經(jīng)驗 獲得超2個贊
如果一個對象具有一個在其生命周期內(nèi)永遠不會改變的哈希值(它需要一個
__hash__()
方法),并且可以與其他對象(它需要一個__eq__()
或多個__cmp__()
方法)進行比較,則該對象是可清除的。比較相等的可哈希對象必須具有相同的哈希值。Hashability使對象可用作字典鍵和set成員,因為這些數(shù)據(jù)結(jié)構(gòu)在內(nèi)部使用哈希值。
所有Python的不可變內(nèi)置對象都是可清除的,而沒有可變?nèi)萜鳎ɡ缌斜砘蜃值洌?。默認情況下,作為用戶定義類實例的對象是可清除的; 他們都比較不平等,他們的哈希值是他們的
id()
。

TA貢獻1871條經(jīng)驗 獲得超13個贊
任何不可變的東西(可變的意思,可能會改變)都可以進行哈希處理。除了要查找的哈希函數(shù),如果一個類有它,例如。dir(tuple)并尋找__hash__方法,這里有一些例子
#x = hash(set([1,2])) #set unhashable
x = hash(frozenset([1,2])) #hashable
#x = hash(([1,2], [2,3])) #tuple of mutable objects, unhashable
x = hash((1,2,3)) #tuple of immutable objects, hashable
#x = hash()
#x = hash({1,2}) #list of mutable objects, unhashable
#x = hash([1,2,3]) #list of immutable objects, unhashable
不可變類型列表:
int, float, decimal, complex, bool, string, tuple, range, frozenset, bytes
可變類型列表:
list, dict, set, bytearray, user-defined classes
添加回答
舉報