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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值