1. 垃圾回收机制
引用计数为主,分代收集为辅。在 python 中,如果一个对象的引用数为 0, python 虚拟机就会回收这个对象的内存。
导致引用计数 +1 的情况:
- 对象被创建: a = classname()
- 对象被引用: b = a
- 对象被作为参数,传入到一个函数中: func(a)
- 对象作为一个元素,存储在容器内: list_name = [a, a]
导致引用计数 -1 的情况:
- 对象的别名被显式销毁, 如: del a
- 对象的别名被赋予新的对象,如:a = other_class()
- 一个对象离开它的作用域,如函数执行完毕时,func 函数中的局部变量
- 对象所在的容器被销毁,或从容器中删除对象
循环引用导致内存泄漏
1 | c1=ClassA() # 内存 1 引用计数 +1 = 1 |
如上文描述,由于循环引用,导致垃圾回收器都不会回收它们,所以就会导致内存泄露。
垃圾回收机制模块: gc