2017-09-08 7 views
1

私は、必要に応じて新しいノードを導入し、ルートノードから4分木を構築するPythonコードを持っています。メモリを浪費することなくツリーをリセットするには?

このquadtreeは継続的に再構築する必要があります。私がこれまで行ってきたのは、quadtreeを再構築する必要があるたびに、ルートノードの子リストを空のリストにリセットし、ルート。

私の心配は、前のツリーの(ルートノード以外の)すべてのノードがまだメモリに存在することです。ツリーはプログラムの過程でおそらく数万回再構築され、おそらく平均で5000個のノードが含まれているので、メモリが過負荷になっても驚くことはありません。

メモリの制限を超えないように、以前のすべてのノードを何とか削除する必要はありませんか?どうすればいい?このような

+0

もっと読むですから、あなたが新しいノードを挿入し、何とか再形作るあなたのツリーに必要であることを意味するものではありませんが、あなたは(たとえばデータセットAに基づいてされて)あなたの木を切断していること新しいデータセットを作成する(Bデータセットに基づいて)? – gsamaras

+0

プログラムが動作する方法は、毎回ルートからツリーを構築する必要があるということです。データセットBを使用してツリーを再構築すると、データセットAを使用した以前のツリーのノードからのデータは気にしません。私がダウンしたのは、ツリーAを「破棄」しないことです。ツリーAのノード。私は同じルートノードから始めて全く新しいツリーBを構築します(最初は子を空にするためにリセットしました)。したがって、Bを構築した後、ツリーBとツリーAの両方からのノードオブジェクトは、正しく理解すれば、メモリに格納されます。私がしなければならないのは、ツリーAを削除することです。しかし、私は方法がわかりません。 –

答えて

0

使用del、:

del children 

リストchildrenはどこにも参照されていない場合は、リストのメモリが解放されることを保証します。

すべてのノードを削除するには、ツリー全体を移動する必要がありますが、これは再帰的に簡単に実行できます。 how to release used memory immediately in python list?

+0

これはどのように問題を解決しますか?ツリーの各ノードは、ノードに関する情報を格納するリスト「データ」と、ノードオブジェクトを含むリスト「子」との2つの関連リストを有する。ノードのリスト「子」を削除しても、ノードの子(それ自体のノードオブジェクト)はメモリに格納されます。私はツリーのすべてのノードオブジェクトを調べ、それらを1つずつ削除する必要がありますか? –

+0

はい@JoshuaBenabou、答えが更新されました! ;) – gsamaras

関連する問題