python 中的每一個對象都有一個哈希值,哈希值是一個固定長度的整數,它通常用于快速比較對象的相等性。
如果在對象的生命周期里該對象的哈希值從未改變,那么這個對象是可哈希的(hashable),也稱為不可變的。如果一個對象的哈希值是不穩定的,則為不可哈希,是可變的。
可以用hash函數檢測一個對象是否是可哈希的。在Python中,如果一個對象是可哈希的,那么我們可以使用內置的hash()函數來獲取其哈希值。如果一個對象是不可哈希的,那么調用hash()函數將會出現TypeError。
可哈希指的是一個對象是否可以被哈希函數處理并得到一個哈希值,該值在對象的生命周期內是不變的。
一般來說,不可變的數據類型(如整數int、浮點數float、布爾值bool、字符串str、元組tuple等)是可哈希的,而可變的數據類型(如列表list、字典dict、集合set等)通常是不可哈希的。
# -*- coding: utf-8 -*-value = 1
try:ret = hash(value)print(ret)
except TypeError as e:print(f"{value} not hash: ", e)data = [1, 2, 3]
try:ret = hash(data)print(ret)
except TypeError as e:print(f"{data} not hash: ", e)"""
運行結果:
1
[1, 2, 3] not hash: unhashable type: 'list'
"""
注意,如果自定義類的實例是不可變的,并且實現了hash()方法和eq()方法,那么這個類的實例也是可哈希的。
end