python字典的实现原理

最近刷算法题时经常要在某个列表中查询某个值。在列表中查询值的时间复杂度高,因此采用字典来代替查询过程。字典的查询、删除、插入平均时间复杂度都是O(1)。

1、字典是通过哈希算法实现的,字典的key可以是str,int,tuple等不可变对象,不能是列表(可变,不可哈希);

2、python3.7之前字典是无序的;

3、字典的实现过程(python3.7之后):

3.1 哈希表和indices:

indices = [None, None, index, None, index, None, index]
entries = [
    [hash0, key0, value0],
    [hash1, key1, value1],
    [hash2, key2, value2]
]

3.2、hash(key)后得到的值与len(entries)-1做‘与’操作得到index(哈希出来的值通常很大,所以做‘与’操作)

3.3、indices中找到index对应的值,此时indices中存储的是key在entries的位置(len(entries))

3.4、解决冲突:python的哈希一般保证indices辅助表间隔取值【None,index,None,index】,使得冲突时能很快找到下一个值。

4、为什么新字典是有序的?

新字典的entries不再是稀疏的,而是由indices维护具体的位置,所以插入的值是有序的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值