如何完全删除乌龟

时间:2017-05-15 05:52:30

标签: python turtle-graphics

我制作了一个小tkinter游戏,使用turtle来制作图片。它是来自Cracker Barrel的Triangle Peg游戏的模拟,能够告诉玩家在游戏中的任何一点进行下一个最佳移动,以及其他功能。 Pegs只是turtle.RawPen的子类的实例,我保留了大量RawPen的简单实例来绘制代表移动的箭头。

我注意到当我重新启动游戏(调用turtle.bye())来杀死乌龟窗口时,内存消耗实际上会增加,因为乌龟似乎不会被删除。即使我事先致电window.clear(),清除了_turtles中的window.__dict__,仍然会提到海龟。我确保在重启期间删除了我对它们所做的所有引用,因此不是问题。有没有办法真正删除一只乌龟,以便它可以被垃圾收集?

3 个答案:

答案 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()