day05 垃圾回收机制

本文详细介绍了Python中的垃圾回收机制,包括引用计数法以及如何处理循环引用问题。通过示例解释了直接引用和间接引用,指出当对象的引用计数为零时会被删除。然而,循环引用导致的问题由“标记-清除”和“分代回收”策略解决,以提高效率并避免内存泄漏。分代回收降低了扫描频率,提升了垃圾回收性能。
摘要由CSDN通过智能技术生成
# 垃圾回收机制详解(了解)

# 1、引用计数
# x = 10  # 直接引用
# print(id(x))
# y = x
# z = x
#
# l = ['a', 'b', x]  # 间接引用
# print(id(l[2]))  #
# #
# # d = {'mmm': x}  # 间接引用
# #
# # print(id(d['mmm']))
#
# x = 10
# l = ['a', 'b', x]
# # l=['a'的内存地址,'b'的内存地址,10的内存地址]
# # 注意:上面的x,其实代表的是10的内存地址,所以最后索引到10
# x = 123
# print(l[2])
# print(x)   #这个地方输出123表示,x的值又被重新赋值

# x=10   直接引用
# x=[10,]   间接引用
#
# l=['a','b',x]   这个处的x值相当于存储的10的内存地址

l1 = [111]
# print(id(l1))
l2 = [222]
# print(id(l2))
l1.append(l2)  # l1=[值111的内存地址,l2列表的内存地址]
l2.append(l1)  # l2=[值222的内存地址,l1列表的内存地址]

# print(id(l1[1]))  # id 2591590150400
# print(id(l2))  # id 2591590150400

# print(id(l2[1]))
# print(id(l1))    #这个地方的 l1 id是最开始的  l1 = [111]的id ,所以列表相当于索引的内存地址

print(l2)
print(l1[1])

del l1
del l2

# 3、分代回收:用来降低引用计数的扫描频率,提升垃圾回收的效率

总结:

上述主要是讲述python通过引用计数的方法,来进行垃圾清理。

引用计数:直接引用       间接引用

问题若最后一个变量值的引用计数为零,则直接就会被当成垃圾清除掉,但同时还要避免间接引用的情况,也就是循环引用,两个变量值之间进行引用,为了解决,采取了标记----清除   与   分代回收

所以Python引入了“标记-清除” 与“分代回收”来分别解决引用计数的循环引用与效率低的问题,通过寻“根”的方法,(即标记----清除变量值与变量名联系的那条线),若没有则会被当作垃圾回收掉

# 3、分代回收:用来降低引用计数的扫描频率,提升垃圾回收的效率

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值