2011-11-23 82 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關鍵字會做。

>>> 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 
59

var = None「清除值」,將變量的值設置爲「無」,如「無」的值,但指向變量的指針保持不變。

del var完全刪除變量的定義。

如果您想在以後使用該變量,例如爲它設置一個新值,即保留該變量,None會更好。

44

其實,這並不會刪除變量/屬性。它所要做的就是將其值設置爲None,因此該變量仍佔用內存中的空間。如果要從內存中完全擦除變量的所有存在,只需鍵入:

del self.left 
+5

我不明白爲什麼=無答案是如此受歡迎。這是正確的答案 –

+0

OP說'清除'不是'刪除'。 del會殺死屬性和查找。將它設置爲None的方法比清除方式更清晰,你可以檢查'self.left'是否足夠檢查節點是否爲空。 – user1767754