我做了一个小的tkinter
游戏,它使用turtle
作为图形。这是一个来自Cracker Barrel的Triangle Peg Game的模拟,它能够告诉玩家在游戏中的任何一点上做出的下一个最佳动作,以及其他功能。挂钩只是turtle.RawPen
的一个子类的实例,并且我保留大量简单的RawPen
实例来绘制表示移动的箭头。如何完全删除乌龟
我注意到当我重新启动游戏(调用)来杀死乌龟窗口时,内存消耗实际上增加了,因为海龟似乎没有被删除。即使我事先打电话window.clear()
,其中清除_turtles
在window.__dict__
,仍然有对乌龟的参考。我确保在重新启动过程中删除了所有对它们的引用,所以这不是问题。有什么办法可以真正删除一只乌龟,这样可以收集垃圾吗?
我打了这个,并得出结论,你必须同时调用'window.clear()''然后window.bye()'来获得个人龟引用计数下降到零。 '.clear()'处理'window._turtles','.bye()'处理像'onclick()'这样的海龟事件方法引起的额外引用。不能说你的额外引用来自哪里。 – cdlane
我在调试过程中使用过'gc.get_referrers()'(我将它们存储在'peg_dir','graveyard'和'artist_dir'中),唯一的引用是包含它们的列表,'window._turtles',和事件方法。我尝试使用'window.clear()',然后'window.bye()','gc.collect()'表示'peg_dir'中的对象无法访问。不知道为什么。我会研究它。 –