2011-11-23 3 views
115

Pythonで変数の値をクリアする方法はありますか?例えばPythonで変数をクリアする

私は、バイナリツリーを実装した場合:

Class Node: 
    self.left = somenode1 
    self.right = somenode2 

私は木からいくつかのノードを削除したい場合は、私は空にself.leftを設定する必要があります。

答えて

104

self.left = Noneに問題がありますか?あなたの質問を誤って解釈したのですか、またはNoneキーワードに精通していませんか?

+7

Noneキーワードには慣れていません。これは他の言語のnullと似ていますか? – Bnicholas

+1

はい。これはnullと等価です。 – Smashery

+0

はい、 'None'は' null'、 'nil'とそのすべての"同義語 "に似ています。 – juliomalegria

242

delキーワードとなります。 EDITED

>>> a=1 
>>> a 
1 
>>> del a 
>>> a 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'a' is not defined 

しかし、私はself.left = None

+11

これが完全に削除されない場合もありますが、メモリ内のその参照のみが削除されます。これはgcを持たないメモリ内にゴースト変数を残す可能性があります。 –

+2

'del'には、存在しない変数を削除しようとすると例外がスローされるという欠点もあります。通常は*望ましくありません。 –

+16

私が指摘したいのは、間違って 'type(...) 'とタイプするときに' type = ... 'などのコマンドで上書きされた変数を宣言した場合、元のコードを削除するのが最も簡単な方法です機能性。つまり、Noneのままにしておけば、基本的な関数へのアクセスを切断することになります。 – mpacer

2

に投票このケースではあなたはこれを試すことができます。

self.left = None 
1

self.left = Noneが仕事をする必要があります。

59

var = None "値をクリア"し、変数の値を "なし"のように "null"に設定しますが、変数へのポインタは残ります。

del varは、変数の定義を完全に削除します。

変数を後で使用する場合は、新しい値を設定します。つまり、変数を保持すると、Noneが改善されます。

44

実際には、変数/プロパティは削除されません。変数の値はNoneに設定されます。したがって、変数はメモリ内の領域を占有します。変数のすべての存在をメモリから完全に消去したい場合は、次のように入力するだけです:

del self.left 
+5

私はなぜ= Noneの答えがとても人気があるのか​​分かりません。これは正しい答えです –

+0

OPは「クリア」ではなく「削除」と言いました。 delは属性とルックアップを消去します。 'self.left'をチェックすれば、ノードが空であるかどうかをチェックするのに十分なはずです。 – user1767754

関連する問題