Python 中的 list、tuple、set、dict的底层实现的理解

本文深入探讨Python中list、tuple、dict和set的数据结构实现原理。list为动态扩容的顺序表,tuple为不可变顺序表,dict利用hash算法快速定位,set通过hash和eq实现元素唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 中的 list、tuple、set、dict的底层实现的理解:

List 本质是顺序表,只不过每次表的扩容都是指数级,所以动态增删数据时,表并不会频繁改变物理结构,同时受益于顺序表遍历的高效性(通过角标配合表头物理地址,计算目标元素的位置),使得python的list综合性能比较优秀;

tuple 本质上就是顺序表,不可修改不可扩容,只读;

dict:本质上是顺序表,不过每个元素存储位置的角标,不是又插入顺序决定的,而是由key经过hash算法和其他机制,动态生成的,即key通过hash散列,生成value应该存储的位置,然后再去存储这个value;所以dict的查询时间复杂度是o(1);因此,dict的key只能为可hash的对象,即不可变类型;

set 实现列表去重:
本质上是通过__hash__和__eq__来实现对每个元素的hash散列,判断hash值是否一致;一致的话,判断对象是否具有一模一样的方法和属性,如果都一致,则去重;因此,set元素也必须是可hash的;

深入一点去理解set:set本质也是dict,只不过其键值都一样;实现去重其实就是这么个过程:首先对key进行hash,在dict中这一步是为了获取value的索引,这里也一样;如果索引相同,说明要么数据重复了,要么key发生了hash碰撞,这时候就去比较两个key对应的value是否相同,如果也相同,确认是数据重复,则去重(保留最新的那个);如果数据不同,说明只是在当前hash算法中,两个key刚好发生了hash碰撞(概率相当低),此时不会发生去重;

个人结合其他博主的文章总结的,加入了一些个人理解,不当之处还望指正。

参考文章:
    https://blog.youkuaiyun.com/liuweiyuxiang/article/details/98943272
    https://blog.youkuaiyun.com/answer3lin/article/details/84523332
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值