有没有办法在python中清除变量的值?
例如,如果我正在实现二叉树:
Class Node:
self.left = somenode1
self.right = somenode2
Run Code Online (Sandbox Code Playgroud)
如果我想从树中删除一些节点,我需要设置self.left
为空.
sta*_*ify 364
该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
Run Code Online (Sandbox Code Playgroud)
编辑:但在这种情况下,我投票支持self.left = None
bna*_*aul 149
怎么了self.left = None
?我是否误解了您的问题,或者您是否只是不熟悉该self.left = None
关键字?
小智 98
var = None
"清除值",将变量的值设置为"null",如"None"的值,但是指向变量的指针仍然存在.
del var
完全删除变量的定义.
如果你想稍后使用变量,例如为它设置一个新值,即保留变量,None
会更好.
小智 62
实际上,这不会删除变量/属性.它所做的就是将其值设置为None
,因此该变量仍将占用内存空间.如果要从内存中完全擦除变量的所有存在,只需键入:
del self.left
Run Code Online (Sandbox Code Playgroud)
U10*_*ard 28
如果要完全删除它使用del
:
__PRE__
否则:
__PRE__
顺便说一句,如果你有一个列表或元组,可以使其为空:
__PRE__
然后del your_variable
将是空的
小智 5
你想删除一个变量,不是吗?
好吧,我想我对@bnaul 的答案有一个最好的替代想法:
您可以使用以下命令删除个人姓名del
:
del x
Run Code Online (Sandbox Code Playgroud)
或者您可以将它们从globals()
对象中删除:
for name in dir():
if not name.startswith('_'):
del globals()[name]
Run Code Online (Sandbox Code Playgroud)
这只是一个示例循环;它防御性地仅删除不以下划线开头的名称,(并非无理)假设您仅在解释器中使用开头不带下划线的名称。如果您确实想要彻底,可以使用硬编码的名称列表来保留(白名单)。除了退出并重新启动解释器之外,没有内置功能可以为您进行清除。
您导入的模块(例如import os
)将保持导入状态,因为它们被sys.modules
;引用。后续导入将重用已导入的模块对象。您只是不会在当前的全局命名空间中引用它们。
通过将其设置为 来删除其内容None
,然后del
从内存中删除其指针
variable = None; del variable
Run Code Online (Sandbox Code Playgroud)