我制作了一个小tkinter
游戏,使用turtle
来制作图片。它是来自Cracker Barrel的Triangle Peg游戏的模拟,能够告诉玩家在游戏中的任何一点进行下一个最佳移动,以及其他功能。 Pegs只是turtle.RawPen
的子类的实例,我保留了大量RawPen
的简单实例来绘制代表移动的箭头。
我注意到当我重新启动游戏(调用turtle.bye()
)来杀死乌龟窗口时,内存消耗实际上会增加,因为乌龟似乎不会被删除。即使我事先致电window.clear()
,清除了_turtles
中的window.__dict__
,仍然会提到海龟。我确保在重启期间删除了我对它们所做的所有引用,因此不是问题。有没有办法真正删除一只乌龟,以便它可以被垃圾收集?
答案 0 :(得分:1)
删除我对画布中对象的所有引用(当然包括TurtleWindow
),然后用canvas.destroy()
销毁画布就可以了。也许还有其他解决方案,但这是我能想到的最好的解决方案。我感谢大家的帮助,因为它将来会很好地为我服务,至少对于不是使用turtle
API创建的对象。
答案 1 :(得分:1)
摆脱海龟数据的通常做法是重置():
carl=Turtle()
.... code
carl.reset()
海龟名单中,kim,donald,fanny和frank都是乌龟:
group=[kim,donald,fanny,frank]
for turtle in group:
turtle.reset()
在特定屏幕上还有一个方便的所有海龟代码,这是一个名为( screen.turtles )的内置列表。所以如果你有一个名为screen的屏幕:
screen=Screen()
...
code
....
for turtle in screen.turtles():
turtle.reset()
答案 2 :(得分:0)
您是否尝试删除使用内存的对象,然后使用Python内置的garbage collector接口明确收集垃圾?
import gc
...
# Delete memory-consuming object
del window._turtles
# Collect the garbage
gc.collect()