Python垃圾收集器

时间:2015-01-28 08:12:48

标签: python garbage-collection

根据下面的代码示例,示例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是另一个类,由于某种原因,我发现它不是在第一个例子中收集的垃圾。我在我的代码中仔细查看,发现B类创建了一个新的C类,并给它一个C类的方法。最后,C实例化了一个循环回来的线程来等待事件,因此B类实例仍然存活,即使已经完成了一个类init。

感谢大家的回答。

3 个答案:

答案 0 :(得分:0)

在这两种情况下,在您实例化B之前,不会引用A实例。

一旦您实例化A,在第一种情况下,它会在__init__运行后立即被丢弃,因为bb将超出范围,并且不会有任何参考B 1}}实例,因此它将在下一个GC循环中进行垃圾收集(确切地说是实现细节的时间)。在第二种情况下,只要存在B实例的引用或手动删除它,就会存在对该A实例的引用。

答案 1 :(得分:0)

在第一个示例bb中,local variable__init__bb变量可以在同一个__init__函数中访问。

在第二个示例中,self.bb对于每个类对象都是Instance variables

答案 2 :(得分:-2)

他们没有任何生命。你必须继承。

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

的详细信息