问题:在python中清除变量
有没有办法清除python中变量的值?
例如,如果我正在实现一棵二叉树:
Class Node:
self.left = somenode1
self.right = somenode2
如果要从树中删除某些节点,则需要将其设置self.left
为空。
回答 0
这有什么错self.left = None
?
回答 1
该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
回答 2
var = None
“清除值”,将变量的值设置为“ null”,就像“ None”的值一样,但是指向变量的指针仍然保留。
del var
完全删除变量的定义。
如果您以后想使用该变量,例如为其设置一个新值,即保留该变量,None
会更好。
回答 3
实际上,这不会删除变量/属性。它所要做的只是将其值设置为None
,因此该变量仍会占用内存空间。如果要从内存中完全清除变量的所有存在,可以键入:
del self.left
回答 4
如果要完全删除它,请使用
del
:del your_variable
否则,要使值
None
:your_variable = None
如果它是可迭代的(例如列表或元组),则可以将其设为空,例如:
your_variable.clear()
然后your_variable
将是空的
回答 5
是否要删除变量,不是吗?
好的,我想我有一个@bnul答案的最佳替代主意:
您可以使用以下方法删除个人名称del
:
del x
或者您可以将它们从globals()对象中删除:
for name in dir():
if not name.startswith('_'):
del globals()[name]
这只是一个示例循环;它仅在防御性上删除不以下划线开头的名称,并假设(不是毫无道理的)假设您在解释器的开头仅使用了没有下划线的名称。如果您确实想透彻一点,则可以使用硬编码的名称列表来保留(白名单)。除了退出并重新启动解释器外,没有内置函数可以为您执行清除操作。
您导入的模块(import os)将保持导入状态,因为它们被sys.modules引用。后续导入将重用已经导入的模块对象。您只是在当前的全局命名空间中没有对它们的引用。
请重新考虑这个答案!
回答 6
我使用了上面提到的一些选项:
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