從以前的java經驗,我知道,如果兩個GUI類對象包含對方的成員變量引用,可能會有內存泄漏,直到兩個對象被銷燬。python嵌套函數內存泄漏?
這種情況是非常混亂的調試,所以我想與嚴格的指導方針,以避免現在在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)
,你可以看到,我有一個調用它僅包含在類方法(「make_child_window」)的局部範圍parent_window一個嵌套函數。這是作弊嗎?在較低的水平python實質上存儲我的「parent_window」作爲類變量?你有什麼其他的建議將child_window從內存中的parent_window中分離出來?
請參閱[我應該擔心Python中的循環引用?](http://stackoverflow.com/questions/2428301/should-i-worry-about-circular-references-in-python)。 – 2012-08-07 19:44:41
特別是,我認爲[這個答案](http://stackoverflow.com/a/2428888/600110)有你需要的所有信息。 – 2012-08-07 20:12:27
很有幫助,雖然他的帖子不像我想要的那麼技術性。如果python有一個更復雜的(或更好地調整GC的循環引用的GUI),那麼很好。否則,病態需要等到我完成這個第一個項目才能掌握它的能力。 – ecoe 2012-08-08 15:36:24