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.分代回收

  分代回收用于解决效率问题

  分代回收 将系统中的所有内存块根据其存活时间划分为不同的集合, 每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。 也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。 那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量, 如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

 思维导图(点击链接

原文地址:https://www.cnblogs.com/zhww/p/12977042.html