Python 知识点

1. Python dict 底层实现:

Python3.6 之前,直接维护一张三列的数组,第一列代表字典key的哈希值,后面的key和value,通过哈希计算得到索引。

Python3.6 及以后维护两张表,一张索引表,在相应的位置(哈希计算得到的索引)上记录数组实际存储的位置(第二张表);数组实际存储的表格按顺序依次放入每次添加的字典数据。

https://zhuanlan.zhihu.com/p/73426505

2. 如何解决哈希冲突(散列冲突)?

开放寻址法:

线性探测,如果某个存储位置被占用后,依次往后查找直到有空闲位置为止(删除数据的时候,标记为 deleted,直到有下个元素插入)。 以及 二次探测 或者 双重散列。

散列表的装载因子 = 填入表中的元素个数/散列表的长度

优点: 数据都存储在数组中,可以有效地利用 CPU 缓存加快查询速度,序列化简单。

缺点:删除麻烦,冲突的代价更高,装载因子的上线不能太大,更浪费内存空间。

数据量小,装载因子小的时候,适合。

拉链法:

在每个桶或者槽会对应一个链表,依次往后放置元素。链表可以个使用 跳表、红黑树等。

优点:

对内存的利用率高,链表结点可以在需要的时候再创建;对装载因子的容忍度更高,可以大于 1.

适合大对象、大数据,更加灵活,支持更多的优化策略。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容