Python hash()函数
在 Python 中,hash()
函数用于获取给定对象的哈希值(散列值),即对象的唯一标识符。
哈希值是一个整数,具有以下特点:
- 对于同一个对象,在程序的不同执行期间,哈希值保持不变。
- 对于不同的对象,哈希值可能相同,但概率很小。
hash()
函数接受一个参数,即要计算哈希值的对象,返回该对象的哈希值(如果它有);
注意:不是所有对象都可以被哈希。只有不可变的对象才能被哈希,比如数字、字符串、元组等。可变的对象(如列表、字典、集合等)不能被哈希。如果尝试对可变对象进行哈希操作,将会抛出TypeError
异常。
hash()函数示例
a = "hello world"
print(hash(a)) # 2181361957466243722(随机)
b = 1
print(hash(b)) # 1
c = 1.0
print(hash(c)) # 1
d = (1,2,3)
print(hash(d)) # 529344067295497451(随机)
e = [1,2,3]
f = {}
#print(hash(e)) # TypeError
#print(hash(f)) # TypeError
__hash__()方法
对象可以实现自己的__hash__()
方法,但是需要注意的是,hash()
根据机器的字长来截断返回值:
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 & 0xffffffff #只保留低32位
b = 12345678901234567890 & 0xffffffffffffffff #只保留低64位
print(hash(b)) # 816463855166098135
如果对象自己实现了__hash__()
方法,hash()
函数会将__hash__()
的返回值与0xffffffffffffffff
进行位与操作;