关于hash表的问题

简介

在进行python的进阶学习中,发现了哈希表,对此有些许困惑,因此本文将进行记录。

什么是哈希表?

哈希表,又名散列表,是键值对的无序集合,其键是唯一的,其数据元素的地址或索引值由散列函数生成。 这使得访问数据的速度更快,因为索引值是数据值的关键字。 换句话说,哈希表存储键值对,但键是通过哈希函数生成的。

  • 哈希是使用算法将任意大小的数据映射到固定长度输出的过程,该输出就是哈希值。
  • 哈希函数,本质上是键到值的映射关系;
  • 在python中字典代表了哈希表的实现
    • 字典中本身是无序的
    • 字典中存在键值对,字典的键是可散列的,即通过散列函数生成该散列函数,该散列函数为提供给散列函数的每个唯一值生成唯一结果。

python哪些属于可哈希或者不可哈希呢?

python官方的名称为hashable,以下是官方文档的定义:
如果一个对象的哈希值在其生命周期内永远不会改变(它需要一个 __hash__() 方法),并且可以与其他对象进行比较(它需要一个__eq__()方法),那么它就是可哈希的。 比较相等的可散列对象必须具有相同的散列值。
哈希性使对象可用作字典键和集合成员,因为这些数据结构在内部使用哈希值。
Python 的大多数不可变内置对象都是可散列的; 可变容器(例如列表或字典)不是; 不可变容器(例如元组和frozensets)只有当它们的元素是可散列的时才是可散列的。 默认情况下,作为用户定义类实例的对象是可散列的。 它们都比较不相等(除了它们自己),它们的哈希值来自它们的 id()。

  • 可以被哈希的数据结构:int、float、str、tuple;
  • 不可以被哈希的数据结构:dict、list、set。
    由此可见,可哈希对应不可变对象,详细可变不可变对象可以参照可变对象、不可变对象

参考

#小手一抬学Python#Python 哈希表与可哈希对象

posted @ 2022-08-09 10:48  形同陌路love  阅读(51)  评论(0编辑  收藏  举报