Python数据结构底层实现分析

Python数据结构底层实现分析

顺序表(线性表)

listtuple
将表元素直接顺序的放在一块划分的连续存储区内,所以元素的顺序关系由存储顺序自然表示。通常元素类型相同,故每个元素的存储量相同,等距安排同等大小的存储单元顺序存储元素数据即可,直接映射到内存里。

优点:O(1)时间直接按位置访问元素,元素存储紧凑,除表元素外,存储区外只需要O(1)空间存放少量辅助信息(max和num)
缺点:表一旦大,需要的连续内存空间就很大。存储块划分之后,不可更新,造成闲置浪费。加入删除操作要移动很多元素,效率低。

哈希表(散列表)

dict
字典也被称为关联数组,还称为哈希数组等。也就是说,字典也是一个数组,但数组的索引是键经过哈希函数处理后得到的散列值。

哈希函数的目的是使键均匀地分布在数组中,并且可以在内存中以== O(1) ==的时间复杂度进行寻址,从而实现快速查找和修改。–> 键值查找 O( 1 ), list O ( n )
在这里插入图片描述
存数dict的时候,首先会根据dict的key进行hash映射到对应的表元,然后再对应的表元中开辟内存,存入数据,当如果存在不同的两个key的hash结果相同的时候,就会使用散列值的另一部分来定位散列表中的另一行。

查找指定key时,会先计算key的散列值,然后使用散列值的一部分来定位表元,如果没有找到相应的表元,则说明dict中不存在对应的key跑出KeyError异常。如果找到表元之后,会判断表元中的key是否和要查找的key相等,相等就返回对应值,如果不相等则使用其对应的散列值的其他部分来定位散列表中的其他行。

set

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页