Python的垃圾回收机制到底是什么回事?从网上找到一大堆的文档,看的也是一知半解,最终就学会了一句话:引用计数器为主、分代码回收和标记清除为辅
。 ??
看了wusir的文章之后,给大家详细说一下Python的垃圾回收机制。
1. 在python的C源码中有一个名为refchain的环状数据链表。在python中,只要创建了新的对象都会添加到这个refchain链表中
2. 引用计数器
在refchain中的对象内部都有一个 ob_refcnt 来保存当前对象的引用计数器,顾名思义就是自己被引用的次数。
比如 name = jk
nickname = name
age = 24
jk的ob_refcnt = 2 、 24的ob_refcnt = 1
当一个值被多次引用时,不会在内存中重复创建数据。而是引用计数器+1。当对象被销毁时,引用计数器-1。如果引用计数器为0,则将对象从refchain链表中摘除,同时在内存中进行销毁。
3. 标记清除&分代回收
引用计数器进行辣鸡回收非常方便和简单。但是会存在循环引用的问题,导致一些数据无法被回收。(未完。。)
原文:https://www.cnblogs.com/chale181106/p/14280039.html