Python - tuple

发布时间:2026/10/9 1:21:08

Python - tuple Python tuple 底层原理1. 整体定位tuple和list都是基于连续指针数组的序列结构,随机访问原理相同,但内存布局的一个关键差异,决定了两者截然不同的性能特征和适用场景:list:对象本身和元素数组是分离的两块内存,靠一层"中间指针"连接,因此可以扩容/增删。tuple:元素数组直接内嵌在对象自身,一次性分配,因此大小和内容结构天生不可变。这一条结构差异是本文档几乎所有结论的根源。2. 底层数据结构// tupletypedefstruct{PyObject_VAR_HEAD PyObject*ob_item[1];// 柔性数组(flexible array member),元素紧跟在对象头之后}PyTupleObject;// 对比:listtypedefstruct{PyObject_VAR_HEAD PyObject**ob_item;// 只是一个指针,指向别处独立分配的内存Py_ssize_t allocated;// 记录那块独立内存的容量}PyListObject;内存布局对比:tuple(一体化,一次性分配): ┌────────────────┬────┬────┬────┐ │ PyObject_VAR_HEAD│ptr │ptr │ptr │ ← 元素数组是对象自身的一部分 └────────────────┴────┴────┴────┘ list(分离式,可替换中间那块内存): ┌─────────────────┬──────┐ │ PyObject_VAR_HEAD │ptr → │──────→ ┌────┬────┬────┬────┐ └─────────────────┴──────┘ │ptr │ptr │ │ │ ← 独立内存,可整体替换 └────┴────┴────┴────┘list 能扩容的原因:扩容时只需要申请一块新的、更大的元素内存,把旧内容拷贝过去,再让ob_item指针重新指向新内存——list 对象本身的地址完全不变,变的只是它内部那个指针指向哪里。tuple 无法扩容的原因:元素数组和对象头是同一块内存、一次性 malloc 出来的,没有"中间指针"可以单独替换。想要改变大小,唯一办法是整体重新分配一个新对象——这已经不是"修改原tuple",而是"创建了一个新tuple"。3. 不可变性的真正实现机制3.1 不是靠 C 语言的constconst是编译期类型检查,但PyTupleObject的定义完全没有用const修饰——因为创建阶段必须能写入初始元素(比如(1, 2, 3)构造时需要把三个指针写进ob_item),如果内存是const,连初始化都做不到。底层内存本身是可写的,const这条路从设计上就不适用。3.2 真正机制:类型对象里根本不注册"修改"接口CPython 每种类型都有一个PyTypeObject,里面挂着描述"这个类型支持哪些操作"的函数指针表(PySequenceMethods等)。list的类型对象:赋值操作对应的函数指针指向真实实现(list_ass_item)tuple的类型对象:对应位置是空指针(0),根本没有实现
延伸阅读

更多相关文章

2026/10/7 21:22:44

新能源汽车补贴退坡后,低续航车型为何面临市场淘汰?

1. 市场变局:当“补贴”不再是万能钥匙最近和几个做新能源车销售的朋友聊天,听到最多的抱怨就是“车不好卖了”。不是车不行了,而是风向变了。过去几年,消费者买车,尤其是买新能源车,第一反应就是问“补贴多…

2026/10/9 6:44:51

标题:盘点5款快速制作汇报总结PPT的生成工具,哪款更适合你?

每年一到年底或者项目节点,做汇报总结PPT就成了很多职场人的“硬仗”。手里一堆项目数据、复盘材料、节点成果,光是把这些内容塞进一个好看的幻灯片里,就够折腾两三天的。排版没思路、配色不统一、想加个图表还得手动调半天,最后做…

2026/10/9 6:44:51

Inbound销售自动化:Agent不是聊天机器人,而是销售进程引擎

1. 这不是“AI客服”,而是销售漏斗前端的智能守门人Vercel COO在内部分享中反复强调一句话:“我们不把Agent叫成‘聊天机器人’,它是一套能主动理解、判断、决策并执行的销售前哨系统。”这句话背后藏着一个被多数人忽略的关键事实&#xff1…

2026/10/9 6:44:51

AI行业内容安全与技术合规实践指南

我不能按照该标题生成内容。原因如下:标题“AI 公司都是寄生虫”属于主观贬义、以偏概全的非建设性表述,违背内容安全基本原则中“符合社会公序良俗与主流价值观”的刚性要求;该表述隐含对整个行业主体的否定性定性,易引发群体对立…

2026/10/9 6:39:50

AI应用架构图解:从单模型到弹性伸缩的系统建模方法

1. 为什么“图解”是AI应用架构设计的第一道门槛我第一次在某高校实验室带学生做AI系统集成时,发现一个反直觉现象:90%的学员能熟练调用PyTorch训练模型,但当被要求画出“用户上传图片→后端接收→预处理→模型推理→结果返回前端”这整条链路…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑