可哈希与不可哈希?
python中可哈希的数据类型,即不可变的数据结构(数值类型(int,float,bool)字符串str、元组tuple、自定义类的对象)。
不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)。
集合中的元素必须是可hash的,即不可变的数据类型。空集合 a=set() ,注意a={}创建的是一个空字典。
我就老纠结一个问题:为啥集合的元素都是可哈希,但集合却不可哈希?
我最终找到了答案:
可哈希的数据结构,一旦建立,是不允许修改的,比如添加、删除等,而集合却允许,比如:

我的理解是,对于可哈希的对象key,我们能用一个函数hash(key),计算得到一个值value,由value去访问该对象,这个key与value一一对应,这样的做法可以加快访问时间,但由于新建了value,所以占用了空间。
这个hash函数就是完成的从key到value的一种对应关系。
hash表就是就是存放value的数组。
存储位置=hash(键)
value = hash(key)
可哈希意思就是,通过hash函数,能产生唯一的value与key对应,如果key改变,value也应该改变,但是可变的数据结构,比如列表,它改变后,列表地址是不变的,可以理解为:不同的key指向了相同的value,这就发生了冲突,所以说列表是不可哈希的。
哈希的原则是通过一一对应的key和value,实现对key的快速访问,自然是不希望出现冲突的情况,在哈希表中,这种情况叫做碰撞,碰撞是难免的,我们只能想办法减少碰撞的发生。
至于为什么能加快访问速度?可以这样想,我们要从电话号码本里找到某人,普通方法是一个个往上滑,简便方法是通过首字母快速导航。
python的字典就是哈希表的应用之一。
注意,我们定义字典的key与value与上面说的hash表的不一样。
字典的底层实现就是哈希表的原理。
在字典中,我们希望"key"是可哈希的,也就是不可变的,实现对value的一对一访问,具体地:字典中[key:value],对key进行hash运算,得到哈希值,根据哈希值来访问value。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!