zoukankan      html  css  js  c++  java
  • Python中的Dict底层 | 字典类型删除数据为什么不直接删除?

    Python中的dict字典类型是通过散列表或者说hash表实现的
    如果出现hash碰撞,采用开放寻址法
    开放寻址法中,所有的元素都存放在散列表里,当产生哈希冲突时,通过一个探测函数计算出下一个候选位置,如果下一个获选位置还是有冲突,那么不断通过探测函数往下找,直到找个一个空槽来存放待插入元素。

    添加元素

    把key通过哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里

    查找元素

    使用哈希函数将key转换为对应的数组下标,并定位到数组的位置获取value。

    删除元素

    采用伪删除的方式,当删除一个元素的时候,不直接删除,而是标记为已删除
    不能直接删除的原因:如果存在a,b哈希碰撞的情况,把a直接删除了的话,下一次查询b的时候,散列到a的位置时,发现为空会直接返回b不在字典中,b就会永远也找不到;所以采用标记的方法,当b散列到a的位置时,发现被标记为已删除,就会根据探测函数寻找下一个位置,直到找到。ab就相当于一个探测链,如果a删除了,b就永远也找不到了。

  • 相关阅读:
    设计模式之原型模式
    设计模式之建造者模式
    一个工厂还能写出花来?
    一个单例还能写出花来?
    python基础之条件循环语句
    python基础之七种运算符
    python基础之五大标准数据类型
    node.js express mvc轻量级框架实践
    js Date() 浏览器兼容问题解决
    js 倒计时(服务器时间同步)
  • 原文地址:https://www.cnblogs.com/leerep/p/13543635.html
Copyright © 2011-2022 走看看