2016-06-28 9 views
0

は、私はまた、私はリンクリストの先頭を指すhead変数を持ってNodePython:リンクされたリストを完全に削除する方法は?

class Node: 
    def __init__(self, data, next): 
     self.data = data 
     self.next = next 

ため、このようなクラス定義を持っていると言うことができます。

は、それが十分に完全にリンクリストを削除するhead = Noneを設定しますか?私はそれが仕事をしなければならないと思いますか?

私はあなたがまだ全体のリストと無料のすべての要素を反復処理する必要がありますc/c++と比較します。

+0

pythonは参照カウントを使用します...ヘッドが先行ノードに割り当てられ、次にヘッドが別のものに再割り当てされる場合...先頭のノードのref-countは1つ減少します... ref-countがゼロである限り、ガベージコレクタはガベージコレクタを収集します...内部メモリ管理の心配があれば、Pythonはあなたにとって適切なツールではないかもしれません...(正しいことをする傾向がありますが、内部実装はしばしば実装固有です) –

+0

@JoranBeasleyリードノードのrefカウントが0より大きい場合、ガーベジコレクションされ、他のリンクされたノードはすべてチェーンによって収集されます? –

+0

子ノードが親をポイントしない限り –

答えて

3

通常、何もする必要はありません。 head変数の有効期間が終了すると、リストへの他の参照がない場合、そのリストは到達不能になり、自動的に収集対象となります。 CPythonでは、通常すぐに収集されますが、それに頼るべきではありません。

head変数の有効期間が終了する前にリストを収集対象にする場合は、head = Noneを設定します(del head)。 (delは "このオブジェクトを削除しない"という意味で "この変数を解除する"を意味します)

関連する問題