python 哈希表_python 字典底层实现原理

e82e6615a1f4f09345009a0b79010653.png

python 字典底层实现原理

python字典底层是通过哈希表来实现的,也就是所字典底层也是一个列表,当我们用字典当中的`key`去获取对应的`value`时,会将`key`转换为列表当中的`index`,通过`index`去准确快速的获取到`value`,哈希表的时间复杂度为O(1)。

哈希表(散列表)

哈希表是一种以 `key-value`存储数据的结构,我们只需要输入需要查找数据的`key`,就能查找到对应的`value`

哈希表思路是如果`key`是整数,那么就将`key`作为列表中的下标,存储到该位置。例如`{2:'a'}`,实际存储到列表当中就是`dictList[2]='a'`。如果`key`不是整数,那么就通过一个函数来将`key`转为数字,并存储到数组中,这个函数就是哈希函数,这个列表就是哈希表

使用哈希查找有两个步骤:

1. 使用哈希函数将被查找的键转换为数组的索引。在理想的情况下,不同的键会被转换为不同的索引值,但是在有些情况下我们需要处理多个键被哈希到同一个索引值的情况。所以哈希查找的第二个步骤就是处理冲突

2. 处理哈希冲突。有很多处理哈希碰撞冲突的方法,通常有两种,一种是链接法,另外一种是开放寻址法。python采用的是开放寻址法

开放寻址法

开放寻址法通常有两种实现方式:

1. 线性寻址

当产生哈希冲突时,就查询该列表的相邻的下一个位置,如果下一个位置已经存入了数据,那么就不断的通过探测函数往下寻找,直到找到一个空槽来存放待插入的元素

2. 二次探测(python 采用的方法)

当产生哈希冲突时,通过一个探测函数计算出下一个候选位置,如果下一个候选位置还是又冲突,那么就不断的通过探测函数往下寻找,直到找到一个空槽来存放待插入的元素

链接法

当产生哈希冲突时,将产生哈希冲突的数据通过链表的形式,链接在一起,当查询数据时,通过哈希函数会定位到这个链表,然后通过比较`key`来找到对应的数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值