闭坑指南 · Python#内存
内存:引用、循环引用与 gc
Python 有 GC,但不代表可以无限造对象;循环引用与泄漏仍会发生。
内存:引用、循环引用与 gc
引用计数
对象没有引用时立即释放。sys.getrefcount 可看引用次数(仅调试)。
循环引用
两个对象互相引用时,仅靠引用计数无法回收;gc 模块会周期扫描。纯 Python 循环引用通常能收回,但:
- 对象有
__del__时可能延迟或进gc.garbage - 全局列表/缓存一直持有引用 → 真泄漏
大列表 / 大字符串
- 切片会复制(对不可变对象是新建)
- 生成器比一次性
list(...)省内存 - 处理大文件用逐行读,不要
read()整个进内存
与 C 的区别
Python 程序员也要关心内存,只是表现形式是 RSS 上涨、OOM、缓存爆满,而不是手动 free。