我是编程的新手,我不明白垃圾回收的工作原理。在以下示例中:

import Tkinter as tk

a = 0

class Object1:

    def __init__(self):
        global a
        a = tk.Frame()
        a.pack()
        b = tk.Button(a, text="click me", command=self.callback)
        b.pack()

    def callback(self):
        print "clicked!"
        program = Object2()

class Object2:

    def __init__(self):
        global a
        a.destroy()
        a2 = tk.Frame()
        a2.pack()
        b = tk.Label(a2, text='This is the second object.')
        b.pack()



program = Object1()

tk.mainloop()


Object1实例的“程序”是否保留在最后?我是否必须以某种方式明确删除它?如果我多次重复此结构,并且每个Objectx都有一个按钮来破坏前一帧并添加一个包含新内容的新帧,那么随着程序的进行,会消耗越来越多的内存吗?谢谢你的帮助。

最佳答案

a将引用“已销毁”的tk.Frame

要允许tk.Frame被垃圾回收,您需要删除对该引用的引用

一种方法是设置a = None,另一种方法是设置del a

当然,当程序实际结束时,所有内容都会释放

关于python - Python实例删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10526363/

10-12 01:20
查看更多