源本科技 | 码上会

Python 内存与垃圾回收

2026/04/05
1
0

Python中深拷贝和浅拷贝的区别

浅拷贝只复制对象的表层结构,不会递归复制内部嵌套的子对象,嵌套数据会共用原始引用。可以用对象的copy()方法或copy模块浅拷贝实现,修改嵌套子对象时,原数据和拷贝数据会同步改变,优点是占用内存小。深拷贝会递归复制对象及其所有层级的子对象,生成完全独立的新对象,需要用copy.deepcopy()实现,修改后互不影响。简单总结:浅拷贝拷一层,深拷贝拷全部。无嵌套的简单数据用浅拷贝,嵌套复杂对象必须用深拷贝,防止误改原始数据。

Python的垃圾回收机制是如何工作的

Python 垃圾回收以引用计数为核心机制,搭配标记清除、分代回收解决缺陷。每个对象都有引用计数器,被引用时计数 +1,引用删除时计数 -1,计数为 0 的对象会被立刻销毁释放内存。但引用计数无法处理循环引用问题,因此引入标记清除:遍历所有对象,标记存活对象,直接清除未标记的垃圾对象。分代回收则优化效率,将对象分三代,新对象频繁扫描回收,老对象减少扫描频率。整套机制自动后台运行,无需手动管理内存,兼顾效率和实用性。

如何在Python中处理循环引用导致的内存泄漏问题

循环引用是多个对象互相引用,导致引用计数永远无法归零,内存无法释放引发泄漏。解决方法有四种:第一,手动断开引用,不用对象时将变量设为None,打破循环链;第二,使用weakref弱引用模块,弱引用不增加计数,从根源杜绝循环引用;第三,依靠 Python 的标记清除机制,它能自动识别并清理循环引用的无用对象;第四,优化代码设计,减少不必要的互相引用。日常开发优先用弱引用,简单高效,生命周期明确的场景用手动处理,就能彻底避免内存泄漏。