写过几年 Python 的人,大概率都遇到过这样的场景:服务跑着跑着 RSS 持续上涨,top 里的内存占用曲线像一条不肯回头的射线;或者某个看似无害的缓存列表,把几十 GB 的内存吃得干干净净。很多人第一反应是"Python 就是慢、就是吃内存",但真正的问题往往不在语言本身,而在我们对它内存模型的理解是否到位。
Python 的内存管理是一套混合策略:以引用计数为主干做即时回收,用分代垃圾回收兜底处理引用计数无法覆盖的循环引用,再通过小整数缓存、字符串驻留、空闲链表等机制降低高频小对象的分配成本。这三者叠加,构成了一个看似简单、实则细节丰富的运行时。本文从源码行为出发,结合生产环境的真实案例,把这套机制讲透。