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))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值