在 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