在python中清除变量

时间:2011-11-23 05:17:26

标签: python

有没有办法在python中清除变量的值?

例如,如果我正在实现二叉树:

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

如果我想从树中删除某个节点,我需要将self.left设置为空。

10 个答案:

答案 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

时,以上命令将仅打印值