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 回收机制的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
- mysqli获取所有数据 mysql的提取函数
- mysql 分组函数 mysql分组取数据
- mysql统计函数
- mysql有rank函数吗 mysql有rank
- mongdb python pythonmongodb操作
- redis-cli命令不能用 redis函数调用失败
- mysql的判断函数 mysql怎么判断奇偶数
- mysql数据库编码格式查询 mysql编码函数
- mysql日期yyyymmdd mysql中的日期型函数
- redis缓存回收 redis回收机制分析
