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

的更多信息