编程语言
首页 > 编程语言> > Python垃圾回收机制

Python垃圾回收机制

作者:互联网

python内存管理机制:引用计数器,垃圾回收机制

引用计数器:一个对象引用数为0时将会释放内存,但它无法检测到对象的循环引用(对象间属性互相调用),从而造成的内存泄漏
垃圾回收机制:解决循环引用问题,收集所有容器对象(只有容器对象才会被循环引用),然后找到容器对象引用的另一个容器对象,将另一个容器对象的引用数-1,
如果其引用数为0,那么这个容器对象就会被引用计数器回收。为了解决效率问题,垃圾回收机制采用了分代检查的方法,刚开始创建的对象被称为0代,
将多次检测后依然存活的对象划分为1,2…代, 1,2…代对象只有在前代检测一定次数后才会被检测一次

引用计数增加的场景:对象被创建+1,对象被引用+1,对象被作为参数传递给一个函数+2,对象作为一个函数传递到一个容器中+1
引用计数减少的场景:对象的别名被显示的销毁,对象的别名被赋予新的对象,一个对象离开它的作用域,对象所在的容器被销毁或从容器中删除对象

sys模块中的getrefcount()函数可以计算引用数,但由于getrefcount()也会引用一次对象。所以得出结果总是比所需要的结果大1

同一个方法对同一个对象引用多次并不会使引用数加一,这是因为每次执行完这个函数后,被引用的对象都会被释放

import sys

class Person:
    pass

def func(obj):
    print(sys.getrefcount(obj))


p = Person()  #  +1
print(sys.getrefcount(p))  # +1

func(p)  # +2

ls = [p]   # +1
print(sys.getrefcount(p))

标签:容器,getrefcount,Python,回收,sys,对象,垃圾,引用
来源: https://blog.csdn.net/qq_42933123/article/details/100106017