【python】python-可哈希对象与不可哈希对象

【python】python-可哈希对象与不可哈希对象


对于哈希一词,想必大家都不陌生。哈希值、哈希算法、可哈希、不可哈希、哈希表中总有一个你熟悉的面孔。那哈希(hash)到底是什么意思呢?今天就好好总结一下!

什么是hashable(可哈希性)

An object is hashable if it has a hash value which never changes during its lifetime (it needs a hash() method), and can be compared to other objects (it needs an eq()or cmp() method). Hashable objects which compare equal must have the same hash value.

如果一个对象是可哈希的,那么在它的生存期内必须不可变(而且该对象需要一个哈希函数),而且可以和其他对象比较(需要比较方法).比较值相同的对象一定有相同的哈希值,即一个对象必须要包含有以下几个魔术方法:

  • __eq__():用于比较两个对象是否相等
  • __cmp__():用于比较两个对象的大小关系,它与__eq__只要有一个就可以了
  • __hash__():实际上就是哈希函数(散列函数),返回经过运算得到的哈希值

可哈希的数据类型

不可变的数据结构(数字类型(int,float,bool)字符串str、元组tuple、自定义类的对象)

对于不可变类型而言,不同的值意味着不同的内存,相同的值存储在相同的内存,可以将我们的不可变对象理解成哈希表中的Key,将内存理解为经过哈希运算的哈希值Value。

不可哈希的数据类型

可变的数据结构 (字典dict,列表list,集合set)

对于可变对象而言,比如一个列表,更改列表的值,但是对象的地址本身是不变的,也就是说不同的Key,映射到了相同的Value,这显然是不符合哈希值的特性的,即出现了哈希运算里面的冲突。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值