我是python的新手,在学习一本名为python GUI Cookbook的书时, 我遇到了一段我不太了解的代码:
在95至98行中,作者创建了一个循环,用于从Tkinter库制作单选按钮的对象。
在上一课中,我了解了垃圾回收。因此,我希望在循环的下一次迭代中,当单选按钮被替换时,前一个按钮将被垃圾回收回收。
如果通过垃圾回收将它们全部回收,它们三个如何保持存在?
答案 0 :(得分:0)
这真的是有关Tkinter实施的问题。
您是正确的,GC会在下一次迭代中收集对象, UNLESS 别的东西也在引用该对象。我不读Tkinter代码库的假设是,当您将win
传递给Radiobutton()
时,该对象会将自身添加到win
中,该对象现在保留了对您对象的引用。
此附加参考信息可防止GC收集您的对象。
OpenSource的优点在于您可以自己寻找:
BaseWidget
在__init__
中要做的最后一件事(self.master
是您的win
自变量):
self.master.children[self._name] = self
这类似于:
foo = []
for x in range(3):
tmp = dict(bar=x)
foo.append(tmp)
tmp
被重新分配,但是基础对象的引用已添加到foo
中。