字典和集合2:高效性和可哈希

本文探讨了Python字典和集合高效性的原因,主要集中在散列表(哈希表)的工作原理上。内容包括散列表的写入和查找过程,以及散列表的缺点——空间浪费。同时,介绍了可哈希性对于字典和集合的重要性,以及哪些Python对象是可哈希的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 字典和集合的高效性

2. 散列表操作

2.1 散列表的写入  

2.2 散列表的查找

2.3 散列表的缺点

3. 可哈希


1. 字典和集合的高效性

许多时候,将列表改为字典或集合后,执行效率将会有巨大的飞跃,两者之间的主要区别在于,列表每次的查找运算都需要从头到尾进行扫描,而字典或集合则只需要进行查表。

在 Python 中,字典和集合所查找的表,即散列表(Hash table),也称为哈希表,是一个稀疏数组(总是有空白元素的数组称为稀疏数组)。  

将要存储的数据是先通过哈希函数:hash() 进行计算获得哈希值,再根据哈希值将存储数据的引用地址(只有这样才无论数据大小,在散列表中存放的数据同样大小),存放在散列表中的一行(通常称之为 bucket)。  

这也会导致一个效果,即:键的值如果相等,则视为重复键。这是因为相同值的键,即使一个是整数1,一个是浮点数1.00,哈希值计算相同,在散列表中的存放位置一致。

2. 散列表

2.1 散列表的写入  

1. Python 调用 hash() 函数,计算字典的 “键” 的哈希值;  

2. 将哈希值的最低几位数字加工后作为偏移量,在散列表中进行索引;  

3. 若找到的 bucket 为空,将键值对写入;  

4. 若找到的 bucket 已存放数据,产生散列冲突,执行如下冲突解决操作:

  • Python 在哈希值中另取几位数字进行加工,重新得到新的 bucket 索引值  
  • 若新的 buc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃烧的火鸟啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值