如何完全删除海龟

How to fully delete a turtle

我制作了一个使用 turtle 图形的小型 tkinter 游戏。它是 Cracker Barrel 的 Triangle Peg Game 的模拟,能够告诉玩家在游戏中的任何时候应该采取的下一步最佳行动,以及其他功能。钉子只是 turtle.RawPen 子类的实例,我保留了大量 RawPen 的简单实例来绘制表示移动的箭头。

我注意到当我重新启动游戏(调用 turtle.bye())杀死海龟时 window,内存消耗实际上增加了,因为海龟似乎没有被删除。即使我事先调用 window.clear(),清除 window.__dict__ 中的 _turtles,仍然有对海龟的引用。我确保在重新启动期间删除我对它们所做的所有引用,所以这不是问题。有什么方法可以真正删除海龟以便对其进行垃圾回收吗?

您是否尝试删除消耗内存的对象,然后使用 Python 的内置 garbage collector 接口显式收集垃圾?

import gc
...
# Delete memory-consuming object
del window._turtles
# Collect the garbage
gc.collect()

删除我对 canvas 中对象的所有引用(当然包括 TurtleWindow),然后用 canvas.destroy() 销毁 canvas 就成功了。也许还有其他解决方案,但这是我能想到的最好的解决方案。我感谢大家的帮助,因为它将来对我有好处,至少对于不是使用 turtle API.

创建的对象

清除海龟数据的通常做法是reset():

carl=Turtle()
.... code
carl.reset()

海龟列表,这里kim,donald,fanny,frank都是海龟:

group=[kim,donald,fanny,frank]
for turtle in group:
    turtle.reset()

对于特定屏幕上的 all 海龟还有一个方便的代码,这是一个名为 (screen.turtles).因此,如果您有一个名为 screen 的屏幕:

screen=Screen()
...
code
....

for turtle in screen.turtles():
    turtle.reset()