Python垃圾回收发生在变量res中

2024-10-08 18:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,假设您执行以下操作:

# var is a variable, ClassName is the name of a class

var = ClassName(<params...>) # instatiate class to var 
var = ClassName(<params...>) # reset variable to new instance

# or in loop

while 1:
    var = ClassName(<params...>)
    # use var ...

我的问题是,上一个实例何时进行垃圾回收? 它发生在下一个实例创建之前还是之后?在


Tags: oftheto实例instancenamenewis
2条回答

请记住(周期性)垃圾收集reference-counting是两种不同的机制。在你的例子中,ref计数是相关的。在

ref count为零的对象将立即释放(无需等待周期性gc运行)。在

[正如@delnan指出的,ref计数并不是python的一个官方“特性”,而是CPython的具体实现细节。然而,值得了解的是]

在您的例子中,您得到两个并发的现有对象。事情发生的顺序是:

a new object is created, and is referenced by name "var"
[you now have one existing object]
while True:
    a new object is created
    [you now have two existing objects]
    it is referenced by name "var" (refcount += 1)
    old object is no longer referenced by name "var" (refcount -= 1)
    old object's refcount is now 0, it gets deallocated
    [you now have one existing object]

如果只希望存在一个并发对象,可以添加del var作为循环中的第一行。在

之后。如果之前发生过这种情况,然后新实例的创建因异常而失败,则变量将处于某种奇怪的状态,未初始化或引用垃圾。假设一个更智能的Python实现可能会提前收集旧对象,前提是它能够证明新对象的创建可以工作,并且不再需要旧对象。在

相关问题 更多 >

    热门问题