news 2026/5/8 8:29:35

Python 内存管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 内存管理

1. Python 对象底层结构

What(是什么)

Python 是用 C 语言写的。你在 Python 里创建的每一个对象(数字、字符串、列表……),底层都是一个 C 语言的结构体(struct),里面维护着一些关键信息。

就像一个快递包裹,外表看起来是你的东西,但快递公司会在包裹外面贴一张快递单,上面记录着寄件人、收件人、重量等信息。Python 对象也一样,每个对象都附带着一张"元信息单",记录着:

字段含义
ob_refcnt引用计数:有多少个变量在用它
ob_type类型:这个对象是 int、float 还是 str
_ob_next指向上一个对象的指针
_ob_prev指向下一个对象的指针

这个结构体叫PyObject,是 Python 中所有对象的"公共头部"。如果对象还包含多个元素(如列表、元组),还会在PyObject基础上加上一个ob_size字段,形成PyVarObject结构体。

Why(为什么需要这些字段)

  • 引用计数:用来判断这个对象是否还有人用,没人用了就可以回收内存。
  • 类型:让 Python 知道这个对象能做什么操作(int 能加减,str 能拼接)。
  • 双向链表指针:Python 把所有创建的对象都串在一条双向链表refchain上,方便统一管理。

就像学校把所有学生档案串成一本花名册,新生入学就加进去,毕业就移除。Python 创建对象时加到refchain,销毁时移除。

How(怎么验证)

创建对象的过程(底层自动完成):

1. 开辟内存 2. 初始化: ob_refcnt = 1 # 至少有一个变量引用它 ob_type = float # 类型 ob_fval = 3.14 # 值 3. 将对象加入双向链表 refchain: _ob_next = 上一个对象 _ob_prev = 下一个对象

业务场景:理解 Python 变量赋值和内存关系
Web后端重要性:⭐⭐
面试:★★
面试题:Python 对象底层包含哪些信息?
:通过PyObject结构体维护四个关键字段:引用计数、类型指针、上一个对象指针、下一个对象指针。所有对象通过_ob_next_ob_prev串在refchain双向链表中。


2. Python 缓存机制

2.1 小整数对象池

What(是什么)

Python 启动时,会提前创建好-5256之间的所有整数对象(共 262 个)。程序中任何用到这个范围内整数的地方,都直接复用这些预先创建好的对象,不会重新开辟内存。

就像学校提前印好了一堆“1号教室”、“2号教室”的门牌,每次需要用某个门牌号,直接拿现成的,不用重新做。

Why(为什么需要)

整数是程序中使用最频繁的类型之一。如果每次用到100都临时创建一个新对象,用完又销毁,会频繁地申请和释放内存,拖慢程序速度。预先创建好,直接用现成的,大幅提升效率。

小整数对象池不会被垃圾回收。

How(怎么验证)

a=100print(id(a))# 例如:140705185112832dela# 删除变量 ab=100print(id(b))# 140705185112832 ← 和 a 的内存地址一样!

注意-5256之外的整数(即 ≥257 或 ≤ -6),每次创建都会生成新的对象

a=257b=257
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 8:26:39

碧蓝航线全自动脚本Alas终极指南:解放双手,重拾游戏乐趣

碧蓝航线全自动脚本Alas终极指南:解放双手,重拾游戏乐趣 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript …

作者头像 李华
网站建设 2026/5/8 8:26:28

别再让CPU干杂活了!手把手教你理解DPU如何为数据中心‘减负’

DPU革命:如何让数据中心CPU专注高价值任务 在数据中心运维的日常中,工程师们常常面临一个令人头疼的现象——昂贵的CPU资源被大量基础设施任务占用,真正创造业务价值的应用反而得不到足够算力。这种现象就像让一位顶尖科学家每天花费80%时间处…

作者头像 李华
网站建设 2026/5/8 8:24:44

Arm Cortex-A75架构解析与性能优化实践

1. Arm Cortex-A75核心架构概述Arm Cortex-A75是Arm公司于2017年推出的高性能处理器核心,属于Cortex-A系列第三代基于Armv8-A架构的设计。作为DynamIQ技术架构下的首款大核产品,它在性能密度和能效比方面实现了显著突破。我在实际芯片开发项目中多次接触…

作者头像 李华
网站建设 2026/5/8 8:21:55

Agent工作流编排:LangChain vs LlamaIndex选型指南

原创技术解读 | 深度对比两大主流Agent框架摘要LangChain和LlamaIndex是当前最流行的两个AI Agent开发框架,各有特色和适用场景。本文从架构设计、核心能力、使用体验等多个维度深度对比这两个框架,帮助开发者做出合适的技术选型决策。## 一、框架概览##…

作者头像 李华
网站建设 2026/5/8 8:06:48

【树莓派】4 - 离线下载

【树莓派】4 - 离线下载 【Bilibili】【树莓派】4 - 离线下载 一、离线下载功能 应用场景:用于下载大文件(高清电影、深度学习模型、系统镜像等),后台挂机下载,不占用手机/电脑资源。 核心功能: 实时查看下载进度 下载完成邮件通知 自动上传网盘保存 支持手机/电脑管理…

作者头像 李华