当前位置: 首页 > news >正文

【python】list的底层实现

python的list本质是动态数组

定义为:

typedef struct { PyObject_VAR_HEAD PyObject **ob_item; // 指向元素指针数组 Py_ssize_t allocated; // 当前分配的容量 } PyListObject;

内部有一块连续的内存,内存中存储指向对象的指针,它会预留额外空间,避免频繁扩容

1.什么是动态数组?

最基础的数组,底层是一段连续空间

动态数组,保留连续内存的特点,但在扩容时候是按比例扩容。当空间不够时,申请一块更大的连续内存,把旧数据复制过去,释放旧内存。

2.list有哪些特点?

list的中存储的是指向对象的指针,因此可以存储int,str等不同数据类型

append的时间复杂度是O(1),因为它会过度分配,当容量不够时,扩容:新容量=原容量*k+常数,扩容的时候,要把旧数据复制到新的位置,长期平均下来是常数级。

访问 list[i],这是纯数组索引:内存地址 = base + i * sizeof(pointer),所以时间复杂度 O(1)。其中base是内存的起始位置,point是指向目前存储位置的指针(list存储的是指向对象的指针,所以不用sizeof(object))

插入 insert(0, x),因为数组是连续内存,要在开头插入,就需要把后面所有元素整体往后搬一格,时间复杂度 O(n)。这也是为什么做队列不要用 list,要用 collections.deque。deque 是双端队列,底层是分块数组 + 链式结构,适合频繁头尾操作

删除元素pop(),pop()默认从末尾删,O(1),pop(0)也是O(n)

python为什么不用链表实现list?链表的插入和删除都很快,但是随机访问很慢,现代cpu依赖缓存,数组时连续内存,cpu可以预读,连边分散内存,缓存命中率低。

为什么list不能无限缩容?不断pop时

3.numpy array和list的差别?

list存的是对象指针,不连续存储数据本体,类型不固定

numpy array连续存储原始数据,数据类型固定,可直接做向量化运算,速度更快(数据挖掘,视觉,机器人算法)

4.deque的特点?

deque的底层是分块数组+链式链接

对于头部操作,appendleft(x),popleft(),都是O(1)

对于尾部操作,是稳定性的O(1),deque不会整体复制

对于随机访问,list O(1), deque O(n),后者需要跳block

list 连续存储,缓存命中率高。deque 分块存储,局部性略差。在大量数值遍历场景下,list 更快。

常用的场景:BFS(广度优先搜索),任务调度,消息队列,滑动窗口等

http://www.jsqmd.com/news/376209/

相关文章:

  • 2026年无锡良机冷却塔公司权威推荐:昆山良机冷却塔、杭州良机冷却塔、良机冷却塔维修、良机冷却塔配件、苏州冷却塔维修选择指南 - 优质品牌商家
  • 数据复制与数据同步:大数据ETL中的关键技术
  • 如何让提示更包容?提示工程架构师的5个实用技巧
  • 大数据领域分布式计算的制造业数据分析
  • AI原生应用架构设计:构建高性能自然语言生成系统的秘诀
  • NBD-X succinimidyl ester,145195-58-0的分子特性与应用场景
  • 2026年评价高的苏州良机冷却塔公司推荐:冷却塔填料更换/冷却塔改造/圆形冷却塔/常州冷却塔维修/方型冷却塔/无锡冷却塔维修/选择指南 - 优质品牌商家
  • 2026年上海良机冷却塔公司权威推荐:杭州良机冷却塔/良机冷却塔维修/良机冷却塔配件/苏州冷却塔维修/闭式冷却塔/选择指南 - 优质品牌商家
  • NBD-X SE,145195-58-0的激发发射光谱与储存稳定性
  • 2026年新疆改性沥青防水卷材厂家深度评测与选型指南 - 2026年企业推荐榜
  • 2026年冷却塔维修厂家推荐:良机冷却塔配件、苏州冷却塔维修、闭式冷却塔、上海冷却塔维修、冷却塔填料更换、冷却塔改造选择指南 - 优质品牌商家
  • Doris在日志分析领域的应用:替代ELK的新选择
  • ICS公司冲刺港股:9个月营收2.1亿 期内利润6594万
  • 【强化学习】08周博磊强化学习纲要学习笔记——第四课下
  • 标签的ref属性
  • How to disable SSL certificate validation in Java
  • ios证书在线检测IPA证书P12证书检测证书掉签检测
  • 2026年常州良机冷却塔厂家推荐:圆形冷却塔、常州冷却塔维修、方型冷却塔、无锡冷却塔维修、昆山冷却塔维修、昆山良机冷却塔选择指南 - 优质品牌商家
  • 2026年苏州冷却塔维修厂家推荐:无锡冷却塔维修/无锡良机冷却塔/昆山冷却塔维修/昆山良机冷却塔/杭州良机冷却塔/选择指南 - 优质品牌商家
  • TensorFlow 实现循环神经网络
  • TensorFlow - TensorBoard 可视化
  • 2026年冷却塔改造厂家最新推荐:上海良机冷却塔/冷却塔填料更换/圆形冷却塔/常州良机冷却塔/方型冷却塔/无锡良机冷却塔/选择指南 - 优质品牌商家
  • 2026年无锡冷却塔维修厂家权威推荐榜:苏州良机冷却塔、闭式冷却塔、上海冷却塔维修、冷却塔填料更换、冷却塔改造选择指南 - 优质品牌商家
  • 2026年评价高的冷却塔配件公司推荐:良机冷却塔厂家/良机冷却塔维修/良机冷却塔配件/苏州良机冷却塔/闭式冷却塔/选择指南 - 优质品牌商家
  • 寒假集训9——图论
  • Java毕设项目:基于springboot的文创销售管理系统(源码+文档,讲解、调试运行,定制等)
  • blender 修改物体 修改衣服
  • ue 蓝图添加灯光
  • 2026年常州冷却塔维修厂家权威推荐榜:昆山冷却塔维修/昆山良机冷却塔/杭州良机冷却塔/良机冷却塔维修/良机冷却塔配件/选择指南 - 优质品牌商家
  • ue 框选 多个对象 框选物体