一 垃圾回收介绍
Python的垃圾回收可以总结为一句话:引用计数器为主,分代回收和标记清除为辅.
1.1 refchain(环状双向链表)
在Python的C源码中有一个名为refchain的环状双向链表.在Python程序中一旦创建对象都会把这个对象添加到refchain这个链表中.它保存着所有对象.例如:
age = 18name= "武沛奇"
1.2 引用计数器
在rechain中所有对象内部都有一个ob_refcnt用来保存当前对象的引用计数器.顾名思义就是自己被引用的次数,例如:
age = 18name= "武沛齐"nickname= name
上述代码表示内存中有18和"武沛齐"两个值,它们的引用计数器分别为1,2.
当值被多次引用的时候,不会再内存中重复创建数据,而是引用计数器+1,如果引用计数器为0,则对象从refchain链表中摘除,同时在内存中进行销毁(暂没有考虑缓存等特殊情况)
age = 18number= age #对象18的引用计数器+1del age #对象18的引用计数器-1def run(age):
print(age)