关于hash表的问题
简介
在进行python的进阶学习中,发现了哈希表,对此有些许困惑,因此本文将进行记录。
什么是哈希表?
哈希表,又名散列表,是键值对的无序集合,其键是唯一的,其数据元素的地址或索引值由散列函数生成。 这使得访问数据的速度更快,因为索引值是数据值的关键字。 换句话说,哈希表存储键值对,但键是通过哈希函数生成的。
- 哈希是使用算法将任意大小的数据映射到固定长度输出的过程,该输出就是哈希值。
- 哈希函数,本质上是键到值的映射关系;
- 在python中字典代表了哈希表的实现
- 字典中本身是无序的
- 字典中存在键值对,字典的键是可散列的,即通过散列函数生成该散列函数,该散列函数为提供给散列函数的每个唯一值生成唯一结果。
python哪些属于可哈希或者不可哈希呢?
python官方的名称为hashable
,以下是官方文档的定义:
如果一个对象的哈希值在其生命周期内永远不会改变(它需要一个 __hash__()
方法),并且可以与其他对象进行比较(它需要一个__eq__()
方法),那么它就是可哈希的。 比较相等的可散列对象必须具有相同的散列值。
哈希性使对象可用作字典键和集合成员,因为这些数据结构在内部使用哈希值。
Python 的大多数不可变内置对象都是可散列的; 可变容器(例如列表或字典)不是; 不可变容器(例如元组和frozensets)只有当它们的元素是可散列的时才是可散列的。 默认情况下,作为用户定义类实例的对象是可散列的。 它们都比较不相等(除了它们自己),它们的哈希值来自它们的 id()。
- 可以被哈希的数据结构:int、float、str、tuple;
- 不可以被哈希的数据结构:dict、list、set。
由此可见,可哈希对应不可变对象,详细可变不可变对象可以参照可变对象、不可变对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现