如何完全删除海龟
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()
我制作了一个使用 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()