• Python中的Dict底层 | 字典类型删除数据为什么不直接删除?


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

    添加元素

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

    查找元素

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

    删除元素

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

  • 相关阅读:
    hdu 1690
    hdu 2962
    hdu 2923
    hdu 1385
    hdu 1505
    python:获取访问访问时的响应时间
    自动化脚本编写环境部署_win7(RF)
    python操作浏览器及截图小结
    Python + Selenium 实现对页面的指定元素截图(可截长图元素)【转载】
    Linux:DNS服务器搭建及配置
  • 原文地址:https://www.cnblogs.com/leerep/p/13543635.html
Copyright © 2020-2023  润新知