Python类如何处理未分配的类实例?

时间:2014-03-14 12:55:48

标签: python class memory-management

任何人都知道如何处理这样的代码?

myclass().mymethod()

通常你会将你的类分配给一个变量并在以后不需要时将其销毁,在这个例子中python是否会运行代码并释放内存,或者它会一直存在直到程序结束?

以上是更清洁的,为什么在你不再需要它时分配一个变量? 以为我会在我把上面的代码放在我的项目之前发现。 :)

1 个答案:

答案 0 :(得分:3)

myclass().mymethod()返回myclass()后,self未创建对mymethod()的其他引用(通过方法的myclass()参数) }将再次从内存中删除。

CPython使用引用计数来跟踪周围的对象。创建myclass()时,堆栈会保留一个引用。然后解释器查找mymethod属性,该属性是一个方法,创建对存储在方法对象上的myclass()对象的另一个引用。堆栈保留在方法对象上,使方法对象保持活动状态以进行下一步。然后调用该方法,该方法将对象作为self传递给函数;这是第3次参考。

如果方法没有将self添加到任何其他结构(例如,将selfself上的其他方法添加到全局列表中),那么该方法返回,清除self本地名称,引用计数降为2.方法本身不再需要,它从堆栈中删除(它会破坏方法对象,因为它现在有0个引用)和myclass()的引用计数降至1. myclass()对象也不再使用,因此计数降为0,实例将从内存中删除。