python字典底层原理_python 字典的核心底层原理

字典对象的核心是散列表。散列表是一个稀疏数组(老是有空白元素的数组),数组的每一个单元叫作 bucket。每一个 bucket 有两部分:一个是键对象的引用,一个是值对象的引用。全部 bucket 结构和大小一致,咱们能够经过偏移量来读取指定 bucket。下面经过存储与获取数据的过程介绍字典的底层原理。

python

d19b8971e1877d8a130d1f76bf44abda.png

存储数据的过程

例如,咱们将‘name’ = ‘张三’ 这个键值对存储到字典map中,假设数组长度为8,能够用3位二进制表示。shell

>>> map = {}

>>> map

{}

>>> map['name'] = '张三'

一、计算name的散列值。数组

>>> bin(hash('name'))

'0b101011100000110111101000101010100010011010110010100101001000110'

二、用散列值的最右边 3 位数字做为偏移量,即“110”,十进制是数字 6。咱们查看偏移量 6,对应的 bucket 是否为空。若是为空,则将键值对放进去。若是不为空,则依次取右移 3 位做为偏移量,即“000”,十进制是数字0,循环此过程,直到找到为空的 buck

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值