python回收函数内存 python 回收机制( 四 )


a = [1],当把列表 [1] 赋值给 a 的时候,它的引用计数就会增加1,此时列表 [1] 对象的引用计数ref=1 ; b = a 又把 a 赋值给 b ,a和b 同时引用python回收函数内存了列表[1]对象,ref又增加1,此时 ref =2 。继续执行 b = None,让b指向None , 这个时候它就不会指向原来的列表[1]对象,列表[1]对象的引入计数就会减少1,又变成ref=1 。执行del a,引用计数就会减少1 , 这个时候 ref = 0 。当对象的引用计数为0就可以回收掉,
注意:del 作用就会减少对象引用计数 , 并不是销毁对象 。只有当引用计数为0的时候 , Python解释器才回去把对象占用的内存回收掉 。
// object.h
struct _object {
Py_ssize_t ob_refcnt;# 引用计数值
}PyObject;
① 什么时候引用计数增加呢?
② 什么时候引用计数会减少呢?
(2)引用计数无法解决循环引用问题
循环引用
a = [1]# 对象[1]引用计数增加1,ref=1
b = [2]# 对象[2]引用计数增加1,ref=1
a.append(b)# b被a引用,对象[2]引用计数增加1 , ref=2
b.append(a)# a又被b引用,对象[1]引用计数增加1,ref=2
del a# 对象[1]引用计数减少1,ref=1
del b# 对象[2]引用计数减少1,ref=1
(3)标记清除(Mark and Sweep)
(4)分代回收
import gc
关于python回收函数内存和python 回收机制的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。