首页 > 其他分享 >什么是可散列(hashable)的数据类型

什么是可散列(hashable)的数据类型

时间:2024-04-16 13:11:07浏览次数:22  
标签:hashable __ hash 对象 数据类型 frozenset 散列

在Python官方词汇表中,关于hashable类型的定义有这样一段话:

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

如果一个对象是可散列的,那么在这个对象的生命周期中,他的散列值是不会变的(它需要实现__hash__()方法)。
它可以与其他对象作比较(还需实现__eq__()方法)。
如果一个可散列对象与另一个可散列对象是相等的,那么他们的散列值hash value一定是相等的。

原子不可变数据类型(str,bytes和数值类型)都是hashable类型
frozenset也是hashable的,因为根据其定义,frozenset里只可容纳可散列类型。

注:frozenset()返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
frozenset()函数语法:class frozenset([iterable])

元组也是hashable的,但只有当元组包含的所有元素都是hashable类型的情况下它才是可散列的。
简单来说,如果一个对象是可散列的数据类型的话,那它应是不可变的。
list等可变对象是不可散列的,因为随着数据的改变他们的哈希值会变化导致进入错误的哈希表。

一般用户自定义的类型的对象都是可散列的,散列值就是它们的id()函数的返回值,所以所有这些对象在比较的时候都是不相等的。如果一个对象实现了__eq__()方法,并且在方法中用到了这个对象的内部状态的话,那么只有当所有这些内部状态都是不可变的情况下,这个对象才是可散列的。

标签:hashable,__,hash,对象,数据类型,frozenset,散列
From: https://www.cnblogs.com/zjw-lxj/p/18137868

相关文章

  • day01-03_我的Java学习笔记(Java基础语法--注释、字面量、变量、二进制、ASCII编码、
    1.Java基础语法1.1注释1.2字面量(Python中叫数据类型)1.3变量1.3.1变量的定义及使用1.3.2变量使用注意事项1.4数据的存储形式:二进制字节、字、bit、byte的关系:字word字节byte位bit,来自英文bit,音译为“比特”,表示二进制位。字长是指字的......
  • day 06-2 数据类型(列表)
    1.3公共功能1.相加,两个列表相加获取一个新的列表data=["张译","冯绍峰"]+["赵又廷","林更新"]print(data)#['张译','冯绍峰','赵又廷','林更新']v1=["赵又廷","林更新"]v2=["张译","冯......
  • day 06-3 数据类型(列表)
    1.6阶段作业1.写代码,有如下列表,按照要求实现每一个功能li=["linzai",'asff','wftthyy','kihfng',"张三四"]#计算列表的长度并输出data=len(li)#print(len(li))print(data)#5#列表中追加元素"seven"#列表中追加元素"seven",并输出添......
  • C语言10-指针(多级指针、空指针、野指针),自定义数据类型(枚举enum、结构体struct)
    第12章指针pointer12.6多级指针指向指针的指针称为多级指针eg:int*ptr1=# int**ptr2=&ptr1; int***ptr3=&ptr2;12.7空指针应用场景:1.暂时不确定指向的指针,可以在定义的时候先赋值为NULL2.有些指针函数,如果内部出现异常无法成功实现功能,可以返回NUL......
  • 4.数据类型
    lua有8中数据类型(使用type()函数可以查看变量数据类型)nil:表示一个无效值,相当于c中NULLboolean:两个值true,false(想当与c中bool)number:双精度类型的实浮点string:字符串(形式:str="我是字符串,我不能跨行"或者str='我是字符串,我不能跨行'或者str=[[......
  • java_基础01_数据类型和变量
     1.注释//单行注释/*多行注释*//**javaDoc:文档注释/***@Descriptionhello*//***_ooOoo_*o8888888o*88"."88*......
  • python八大数据类型及方法
    【1】学习变量的目的学习变量有助于我们在程序中存储和操作数据,提高代码的灵活性和可维护性。通过使用变量,我们可以方便地引用和修改数据,使得程序能够动态地响应不同的输入和条件。【2】学习基本数据类型的目的学习基本数据类型有助于我们理解不同类型的数据在计算机中的表......
  • python学习之:数据类型
    大纲:一、列表list的定义语法1、""""演示数据类型:list列表语法:变量=[元素1,元素2,元素3,......]"""#定义一个列表listname_list=['itheima','itcast','python']print(name_list)print(type(name_list))#定义一个嵌套的列表statis......
  • python基础-数据类型、字典、集合、文件操作(打开、关闭、读写、追加等)
    前言!!!注意:本系列所写的文章全部是学习笔记,来自于观看视频的笔记记录,防止丢失。观看的视频笔记来自于:哔哩哔哩武沛齐老师的视频:​​2022Python的web开发(完整版)入门全套教程,零基础入门到项目实战​数据结构数据类型字符串列表元组集合字典整型布尔None浮点型字节类......
  • 哈希(散列)查找
    1.哈希表(HashTable)(1)哈希表定义又称散列表,是一种数据结构,数据元素的关键字与其存储地址直接相关(2)同义词若不同的关键字通过散列函数映射到同一个值,则称为“同义词”(3)冲突通过散列函数确定的位置已经存放了其他元素,则称这种情况为“冲突”(4)填装因子装填因子=表中记录......