Python3 hash函数问题

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函数的一些问题了。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页