Python 垃圾收集器
Python garbage collector
给定下面的代码示例,示例 1 中 bb
和示例 2 中的 self.bb
的生命周期是什么
示例 1
import B
class A:
def __init__( self ):
bb = B( self )
示例 2
import B
class A:
def __init__( self ):
self.bb = B( self )
编辑:
B 是另一个 class,出于某种原因,我发现它在第一个示例中没有被垃圾回收。我更仔细地查看了我的代码,发现 B class 创建了一个新的 class C 并将其方法之一引用给了那个 C class。最后,C 实例化了一个环回线程来等待事件,因此 B class 实例仍然存在,即使 A class 初始化已完成。
感谢大家的回答。
在这两种情况下,在实例化 A
之前都不会引用 B
实例。
一旦实例化 A
,在第一种情况下,它将在 __init__
运行后立即被丢弃,因为 bb
将超出范围并且不会留下任何引用B
个实例,因此它将在下一个 GC 周期中被垃圾收集(具体时间是一个实现细节)。在第二种情况下,只要 A
实例的引用存在或直到您手动删除它,对该 B
实例的引用就会存在。
在第一个示例中,bb
对于函数 __init__
是 local variable
bb
变量可以在同一个 __init__
函数中访问。
在第二个示例中,self.bb
是每个 class 对象的 Instance variables
。
他们没有任何寿命。你得继承。
Example 1
import B
class A:
def __init__( self ):
B.__init__(self)
bb = B()
Example 2
import B
class A:
def __init__( self ):
B.__init__(self)
bb = B()
有关init
的更多信息
给定下面的代码示例,示例 1 中 bb
和示例 2 中的 self.bb
的生命周期是什么
示例 1
import B
class A:
def __init__( self ):
bb = B( self )
示例 2
import B
class A:
def __init__( self ):
self.bb = B( self )
编辑:
B 是另一个 class,出于某种原因,我发现它在第一个示例中没有被垃圾回收。我更仔细地查看了我的代码,发现 B class 创建了一个新的 class C 并将其方法之一引用给了那个 C class。最后,C 实例化了一个环回线程来等待事件,因此 B class 实例仍然存在,即使 A class 初始化已完成。
感谢大家的回答。
在这两种情况下,在实例化 A
之前都不会引用 B
实例。
一旦实例化 A
,在第一种情况下,它将在 __init__
运行后立即被丢弃,因为 bb
将超出范围并且不会留下任何引用B
个实例,因此它将在下一个 GC 周期中被垃圾收集(具体时间是一个实现细节)。在第二种情况下,只要 A
实例的引用存在或直到您手动删除它,对该 B
实例的引用就会存在。
在第一个示例中,bb
对于函数 __init__
是 local variable
bb
变量可以在同一个 __init__
函数中访问。
在第二个示例中,self.bb
是每个 class 对象的 Instance variables
。
他们没有任何寿命。你得继承。
Example 1
import B
class A:
def __init__( self ):
B.__init__(self)
bb = B()
Example 2
import B
class A:
def __init__( self ):
B.__init__(self)
bb = B()
有关init
的更多信息