有没有办法在python中清除变量的值?
例如,如果我正在实现二叉树:
Class Node:
self.left = somenode1
self.right = somenode2
如果我想从树中删除某个节点,我需要将self.left
设置为空。
答案 0 :(得分:337)
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
答案 1 :(得分:132)
self.left = None
出了什么问题?我是否误解了您的问题,或者您是否只是不熟悉None
关键字?
答案 2 :(得分:93)
var = None
&#34;清除值&#34;,将变量的值设置为&#34; null&#34;喜欢&#34;无&#34;的值,但是指向变量的指针仍然存在。
del var
完全删除变量的定义。
如果您想稍后使用该变量,例如为它设置一个新值,即保留变量,None
会更好。
答案 3 :(得分:61)
实际上,这不会删除变量/属性。它所做的就是将其值设置为None
,因此该变量仍将占用内存空间。如果要从内存中完全擦除变量的所有存在,只需键入:
del self.left
答案 4 :(得分:14)
如果要完全删除它,请使用del
:
del your_variable
否则,要清除其内容:
your_variable = None
如果它是列表或元组,则可以将其设置为空,例如:
your_variable.clear()
然后your_variable
将为空
答案 5 :(得分:3)
你可以试试这个:
self.left = None
答案 6 :(得分:2)
您要删除变量吗?
好的,我想我有一个@bnul答案的最佳替代主意:
您可以使用del
删除单个名称:
del x
或者您可以将它们从globals()对象中删除:
for name in dir():
if not name.startswith('_'):
del globals()[name]
这只是一个示例循环;它仅在防御性上删除不以下划线开头的名称,并假设(并非毫无道理)您在解释器的开头仅使用了没有下划线的名称。如果您确实想透彻一点,则可以使用硬编码的名称列表来保留(白名单)。除了退出并重新启动解释器外,没有内置函数可以为您执行清除操作。
您导入的模块(import os)将保持导入状态,因为它们被sys.modules引用;随后的导入将重用已经导入的模块对象。您只是在当前的全局命名空间中没有对它们的引用。
请重新考虑此答案!
答案 7 :(得分:0)
self.left = None
应该完成这项工作。
答案 8 :(得分:0)
通过将其设置为 None
然后将 del
从内存中删除其指针来删除其内容
variable = None; del variable
答案 9 :(得分:-1)
我使用了上面提到的一些选项:
del self.left
或使用
将值设置为“无”self.left = None
当您将值设置为None时,了解差异并放置一些异常处理程序非常重要。如果要使用模板打印条件语句的值,请说
print("The value of the variable is {}".format(self.left))
您可能会看到变量的值显示为“变量的值为None”。因此,您必须在其中放置一些异常处理程序:
if self.left:
#Then only print stuff
仅当self.left不是None