hash()函数返回对象的哈希值(如果有的话)。 哈希值是整数。 它们用于在字典查找期间快速比较字典关键字。 对象可以实现__hash__()方法。
hash函数只可用于不可变的python对象
print(hash(123))
print(hash('123'))
print(hash((1,2,3)))
输出如下:
123
2842006114551993819
529344067295497451
注意:数字的hash值是他自生,而其他的对象的hash值每次运行的都会不一样,这主要是由于python的hash算法导致的,每个python虚拟机的magic值都不一致。
有些python对象是无法获取hash值的
比如list
print(hash([1,2,3]))
输出如下:
TypeError: unhashable type: 'list'
print(hash([1,2,3]))
还有dict
print(hash({'a':1,'b':2}))
输出如下:
TypeError: unhashable type: 'dict'
print(hash({'a':1,'b':2}))
类的hash值比较特殊,如果不重载__hash__方法的话其hash值为id(o)/16。
class TTest():
def __init__(self,p):
self.p = p
t1 = TTest(1)
t2 = TTest(2)
print(hash(t1))
print(hash(t2))
print(id(t1)/16)
print(id(t2)/16)
输出如下:
8771447774958
8771447794728
8771447774958.0
8771447794728.0
如果重载了__hash__方法的话则结果就完全不一样了
class TTest():
def __init__(self,p):
self.p = p
def __hash__(self):
return hash(self.p)
t1 = TTest(1)
t2 = TTest(1)
print(hash(t1))
print(hash(t2))
输出如下:
1
1
以上就是python3 hash函数的一些问题了。