Python垃圾回收机制
Python垃圾回收机制
指是Python自带的一种机制,用于回收不可以变量值所占的内存空间。
1.引用计数
引用计数表示变量值被引用的次数
栈区:用于存储变量值的内存地址
堆区:用于存储值
1.当一个值被引用时则引用计数加1
2.当被销毁时这引用计数减1
3.当引用计数为0时则变量名回被垃圾回收机制回收空间
引用分为两种:直接引用和间接引用
# 直接引用
x = 10
y = x
z = x
print(id(x)) # 1802076560
print(id(y)) # 1802076560
print(id(z)) # 1802076560
# 间接引用
l = [1,2,3]
print(l[0]) # 1
2.标记-清除
标记-清除用于解决循环引用问题
循环引用很危险,当l1,l2变量被销毁时,则这两个值的引用计数不为1,但是还是存在,但是这个两个又没有办法取到,因为这个两个值还存在互相引用,循环引用很容易引起内容泄露,所有很危险!!
l1 = [1, 2, 3]
l2 = ["a", "b", "c"]
res1 = l1.append(l2) #res1与res2互相引用
res2 = l2.append(l1)
print(id(res1)) # 1801616688
print(id(res2)) # 1801616688
print(id(l1)) # 40625800
print(id(l2)) # 40627080
3.分代回收
分代回收用于解决效率问题
分代回收 将系统中的所有内存块根据其存活时间划分为不同的集合, 每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。 也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。 那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量, 如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。