清除python中的变量

在python中有一种方法可以清除变量的值吗?

例如,如果我要实现一个二叉树:

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

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

732413 次浏览

self.left = None有什么问题?

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

var = None“清除值”,将变量的值设置为“null”,类似于“None”的值,但是指向变量的指针仍然存在。

del var完全删除了变量的定义。

如果你以后想要使用这个变量,例如为它设置一个新值,即保留变量,None会更好。

实际上,这并没有删除变量/属性。它所要做的就是将其值设置为None,因此该变量仍将占用内存空间。如果你想从内存中完全清除变量的所有存在,你可以输入:

del self.left
  • 如果想要完全删除使用del:

    del your_variable
    
  • 否则,到使值None:

    your_variable = None
    
  • 如果它是可变iterable(列表、集、字典等,但不是元组,因为它们是不可变的),你可以像这样将其设为空:

    your_variable.clear()
    

那么your_variable将为空

你想要删除一个变量,不是吗?

好吧,我想我有一个最好的替代@bnaul的回答的想法:

你可以使用del删除个人名称:

del x

或者你可以从globals()对象中删除它们:

for name in dir():
if not name.startswith('_'):
del globals()[name]

这只是一个循环示例;它防御性地只删除不以下划线开头的名称,假设(并非毫无道理)在解释器中只使用开头没有下划线的名称。如果你真的想要彻底,你可以使用一个硬编码的名单来代替(白名单)。除了退出并重新启动解释器之外,没有内置函数为您执行清除操作。

你导入的模块(比如import os)将保持导入状态,因为它们被sys.modules引用;后续导入将重用已经导入的模块对象。只是在当前全局名称空间中没有对它们的引用。

通过将其设置为Nonedel来删除其内容,从而从内存中删除其指针

variable = None; del variable