在 Python 中,hash()函数用于获取给定对象的哈希值(散列值)。

哈希值是一个整数,具有以下特点:

  • 对于同一个对象,在程序的不同执行期间,哈希值保持不变。
  • 对于不同的对象,哈希值可能相同,但概率很小。

hash()函数接受一个参数,即要计算哈希值的对象,返回该对象的哈希值(如果它有);

注意:不是所有对象都可以被哈希。只有不可变的对象才能被哈希,比如数字、字符串、元组等。可变的对象(如列表、字典、集合等)不能被哈希。如果尝试对可变对象进行哈希操作,将会抛出TypeError异常。

hash() 函数示例

a = "hello world"
print(hash(a)) # 每次运行随机 
print(hash(a)) # 但在同一次运行中相同

b = (1,2,3)
print(hash(d))

c = [1,2,3]
d = {}
#print(hash(c)) # TypeError
#print(hash(d)) # TypeError

__hash__() 方法

对象可以实现自己的__hash__()方法,hash()函数会将__hash__()的返回值与0xffffffffffffffff进行位与操作,并根据机器的字长来截断返回值,比如64位的机器只保留低64位;

class myClass:

    def __init__(self,value):
        self.value = value

    def __hash__(self):
        return self.value

a = myClass(1234567890)
print(hash(a)) # 1234567890

a.value = 12345678901234567890
print(hash(a)) # 816463855166098135

b = 12345678901234567890 & 0xffffffffffffffff  #只保留低64位
print(hash(b)) # 816463855166098135