2011-11-23 46 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