垃圾回收:引用计数与分代收集机制

本文详细介绍了Python中引用计数机制的工作原理,包括其优缺点,如何影响对象的生命周期,以及Python如何结合分代收集处理循环引用等问题,确保内存的有效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:https://blog.youkuaiyun.com/xun527/article/details/77017862

当引⽤计数为0时,该对象⽣命就结束了。

引⽤计数机制的优点:

1、简单

2、实时性:⼀旦没有引⽤,内存就直接释放了。不⽤像其他机制等到特定时机。实时性还带来⼀个好处:处理回收内存的时间分摊到了平时。

引⽤计数机制的缺点:

1、维护引⽤计数

2、消耗资源循环引⽤

list1 = []

list2 = []

list1.append(list2)

list2.append(list1)

list1与list2相互引⽤,如果不存在其他对象对他们的引用,list1与list2的引用计数也仍然1,所占⽤的内存永远无法被回收,这将是致命的。 对于如今的强⼤硬件,缺点1尚可接受,但是循环引⽤导致内存泄露,注定python还将引⼊新的回收机制。(分代收集)

⼀.垃圾回收机制

Python中的垃圾回收是以引用计数为主,分代收集为辅。

1、导致引用计数+1的情况

对象被创建,例如a=23

对象被引⽤,例如b=a

对象被作为参数,传⼊到⼀个函数中,例如func(a)

对象作为⼀个元素,存储在容器中,例如list1=[a,a]

2、导致引用计数-1的情况

对象的别名被显式销毁,例如del a

对象的别名被赋予新的对象,例如a=24

⼀个对象离开它的作⽤域,例如f函数执⾏完毕时,func函数中的局部变量(全局变量不会)

对象所在的容器被销毁,或从容器中删除对象

3、查看一个对象的引用计数

import sys

a = “hello world”

sys.getrefcount(a)

可以查看a对象的引用计数,但是⽐正常计数⼤1,因为调⽤函数的时候传入a,这会让a的引用计数+1

4.有三种情况会触发垃圾回收:

当gc模块的计数器达到阀值的时候,自动回收垃圾
调⽤gc.collect(),手动回收垃圾
程序退出的时候,python解释器来回收垃圾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值