Python对象循环引用的垃圾回收算法是如何运作的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计729个文字,预计阅读时间需要3分钟。
来介绍一下Python是如何解决循环引用问题的。
Python采用一种称为引用计数的机制来解决循环引用问题。在上图中,表示的是对象之间的引用关系,从自对象指向它对象的引用用黑色箭头表示。每个对象内部都有一个计数器,用于记录有多少个引用指向它。当对象的引用计数降到0时,Python会自动回收该对象所占用的内存。
右侧部分表示的是引用计数器。每个对象都有一个计数器,用于记录指向该对象的引用数量。当对象被创建时,计数器初始化为1。当有新的引用指向该对象时,计数器加1;当引用被删除时,计数器减1。当计数器为0时,Python会回收该对象所占用的内存。
来介绍一下 Python 是采用何种途径解决循环引用问题的。
上图中,表示的是对象之间的引用关系,从自对象指向他对象的引用用黑色箭头表示。每个对象里都有计数器。 而图中右侧部分可以很清晰的看到是循环引用的垃圾对象。
上图,将每个对象的引用计数器复制到自己的另一个存储空间中。
上图其实和图二没什么区别,只不过更清晰了。因为对象本来就是由对象链表连接的。只不过是把对象链表画了出来。
上图中,将新复制的计数器都进行了减量的操作。先不要管为什么,继续往下看。但是可以看到,由根直接引用的对象中,新复制的计数器并没有减量。
本文共计729个文字,预计阅读时间需要3分钟。
来介绍一下Python是如何解决循环引用问题的。
Python采用一种称为引用计数的机制来解决循环引用问题。在上图中,表示的是对象之间的引用关系,从自对象指向它对象的引用用黑色箭头表示。每个对象内部都有一个计数器,用于记录有多少个引用指向它。当对象的引用计数降到0时,Python会自动回收该对象所占用的内存。
右侧部分表示的是引用计数器。每个对象都有一个计数器,用于记录指向该对象的引用数量。当对象被创建时,计数器初始化为1。当有新的引用指向该对象时,计数器加1;当引用被删除时,计数器减1。当计数器为0时,Python会回收该对象所占用的内存。
来介绍一下 Python 是采用何种途径解决循环引用问题的。
上图中,表示的是对象之间的引用关系,从自对象指向他对象的引用用黑色箭头表示。每个对象里都有计数器。 而图中右侧部分可以很清晰的看到是循环引用的垃圾对象。
上图,将每个对象的引用计数器复制到自己的另一个存储空间中。
上图其实和图二没什么区别,只不过更清晰了。因为对象本来就是由对象链表连接的。只不过是把对象链表画了出来。
上图中,将新复制的计数器都进行了减量的操作。先不要管为什么,继续往下看。但是可以看到,由根直接引用的对象中,新复制的计数器并没有减量。

