任何人都知道如何处理这样的代码?
myclass().mymethod()
通常你会将你的类分配给一个变量并在以后不需要时将其销毁,在这个例子中python是否会运行代码并释放内存,或者它会一直存在直到程序结束?
以上是更清洁的,为什么在你不再需要它时分配一个变量? 以为我会在我把上面的代码放在我的项目之前发现。 :)
答案 0 :(得分:3)
在myclass().mymethod()
返回myclass()
后,self
未创建对mymethod()
的其他引用(通过方法的myclass()
参数) }将再次从内存中删除。
CPython使用引用计数来跟踪周围的对象。创建myclass()
时,堆栈会保留一个引用。然后解释器查找mymethod
属性,该属性是一个方法,创建对存储在方法对象上的myclass()
对象的另一个引用。堆栈保留在方法对象上,使方法对象保持活动状态以进行下一步。然后调用该方法,该方法将对象作为self
传递给函数;这是第3次参考。
如果方法没有将self
添加到任何其他结构(例如,将self
或self
上的其他方法添加到全局列表中),那么该方法返回,清除self
本地名称,引用计数降为2.方法本身不再需要,它从堆栈中删除(它会破坏方法对象,因为它现在有0个引用)和myclass()
的引用计数降至1. myclass()
对象也不再使用,因此计数降为0,实例将从内存中删除。