有人知道这样的代码是如何处理的吗?
myclass().mymethod()
通常情况下,你会将你的类分配给一个变量,并在不需要时销毁它,在这种情况下,python 会运行代码并在之后释放内存,还是会一直挂起直到程序结束?
上面的内容更清晰,为什么当您不再需要它时分配给变量呢? 我以为我会在将上述代码放入我的项目之前找到答案。 :)
最佳答案
假设myclass().mymethod()
不会创建对myclass()
的额外引用(通过方法的self
参数),一旦 mymethod()
返回 myclass()
将再次从内存中删除。
CPython 使用引用计数来跟踪周围有哪些对象。当您创建 myclass()
时,堆栈会保存对其的一个引用。然后,解释器查找 mymethod
属性,该属性是一个方法,创建对存储在方法对象上的 myclass()
对象的另一个引用。堆栈保留方法对象,使方法对象保持事件状态以进行下一步。然后调用该方法,该方法将对象作为 self 传递给函数;这是第三个引用。
如果该方法未将 self
添加到任何其他结构(将 self
或 self
上的另一个方法添加到全局列表,例如例如),然后当方法返回时,self
本地名称被清理,引用计数下降到2。方法本身不再需要,它被从堆栈中删除(这会破坏方法对象,因为它现在有 0 个引用),并且 myclass()
的引用计数下降到 1。 myclass()
对象也不再使用,因此计数下降为 0,并且实例从内存中删除。
关于Python 类如何处理未分配的类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22405638/