【发布时间】:2012-08-07 19:35:19
【问题描述】:
根据之前的 java 经验,我知道如果两个 GUI 类对象包含彼此的成员变量引用,则可能会发生内存泄漏,直到两个对象都被销毁。
这种情况调试起来非常混乱,所以我想使用严格的准则来避免现在在 python 中的内存泄漏。
我目前有一个 GUI 系统,其中有一个主窗口 (parent_window) 和许多子窗口(子窗口),它们会弹出用户的辅助选项等。
我认为防止内存泄漏的一种简单方法是不要在所有子窗口中保留父窗口的类成员变量。
class child_window(object):
def make_child_window(self, parent_window):
def on_ok(): parent_window.show()
QtCore.QObject.connect(self.okbutton, QtCore.SIGNAL("clicked()"), on_ok)
如您所见,我有一个调用 parent_window 的嵌套函数,它只包含在类方法的本地范围内(“make_child_window”)。这是作弊吗?在较低级别上,python 本质上是否将我的“parent_window”存储为类变量?对于将 child_window 与内存中的 parent_window 隔离开来,您还有哪些其他建议?
【问题讨论】:
-
特别是,我认为this answer 拥有您需要的所有信息。
-
很有帮助,虽然他的帖子不像我希望的那样技术性。如果 python 有一个更复杂的(或更好地调整 GC 以循环引用 GUI),那就太好了。否则我需要等到我完成第一个项目才能了解它的能力。
标签: python function memory nested memory-leaks