我做了一個小的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'中的對象無法訪問。不知道爲什麼。我會研究它。 –