在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 ...
我的问题是,上一个实例何时进行垃圾回收? 它发生在下一个实例创建之前还是之后?在
请记住(周期性)垃圾收集和reference-counting是两种不同的机制。在你的例子中,ref计数是相关的。在
ref count为零的对象将立即释放(无需等待周期性gc运行)。在
[正如@delnan指出的,ref计数并不是python的一个官方“特性”,而是CPython的具体实现细节。然而,值得了解的是]
在您的例子中,您得到两个并发的现有对象。事情发生的顺序是:
如果只希望存在一个并发对象,可以添加
del var
作为循环中的第一行。在之后。如果之前发生过这种情况,然后新实例的创建因异常而失败,则变量将处于某种奇怪的状态,未初始化或引用垃圾。假设一个更智能的Python实现可能会提前收集旧对象,前提是它能够证明新对象的创建可以工作,并且不再需要旧对象。在
相关问题 更多 >
编程相关推荐