【发布时间】:2012-01-04 11:26:48
【问题描述】:
有没有办法清除python中变量的值?
例如,如果我正在实现一棵二叉树:
class Node:
self.left = somenode1
self.right = somenode2
如果我想从树中删除某个节点,我需要将self.left 设置为空。
【问题讨论】:
标签: python
有没有办法清除python中变量的值?
例如,如果我正在实现一棵二叉树:
class Node:
self.left = somenode1
self.right = somenode2
如果我想从树中删除某个节点,我需要将self.left 设置为空。
【问题讨论】:
标签: python
通过将其设置为None 来删除其内容,然后将其设置为del 以从内存中删除其指针
variable = None; del variable
【讨论】:
你想删除一个变量,不是吗?
好的,我想我有一个最好的替代 @bnaul's answer 的想法:
您可以使用del删除个人姓名:
del x
或者您可以将它们从globals() 对象中删除:
for name in dir():
if not name.startswith('_'):
del globals()[name]
这只是一个示例循环;它防御性地仅删除不以下划线开头的名称,并做出(并非不合理的)假设,即您仅在解释器的开头使用了没有下划线的名称。如果您真的想要彻底,您可以使用硬编码的名称列表来保留(白名单)。除了退出并重新启动解释器之外,没有内置功能可以为您进行清除。
您导入的模块(如import os)将保持导入状态,因为它们被sys.modules 引用;后续导入将重用已导入的模块对象。您只是不会在当前的全局命名空间中引用它们。
【讨论】:
如果想完全删除它,请使用del:
del your_variable
否则,将值设为None:
your_variable = None
如果它是一个可变可迭代(列表、集合、字典等,但不是元组,因为它们是不可变的),您可以将其设为空,如下所示:
your_variable.clear()
那么your_variable将为空
【讨论】:
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
【讨论】:
del 也有一个缺点,即如果您尝试删除一个不存在的变量,则会引发异常,这通常是不可取的。
type=… ,当你打算输入 type(…) 时,删除它是最简单的返回方法原来的功能。也就是说,如果您将其保留为 None ,您仍然会切断对底层函数的访问。
set = set(myList) 然后意识到我不能再将 set 用作函数(doh)。使用del set 让我可以再次将其用作特效。当然,我永远不会在实际脚本中使用那个保留的 var。
我使用了上面提到的几个选项:
del self.left
或使用
将值设置为 Noneself.left = None
当您使用将值设置为无时,了解差异并放置一些异常处理程序非常重要。如果您使用模板打印条件语句的值,例如,
print("The value of the variable is {}".format(self.left))
您可能会看到变量的值打印“变量的值是无”。因此,您必须在那里放置一些异常处理程序:
if self.left:
#Then only print stuff
上面的命令只会在 self.left 不是None时打印值
【讨论】:
self.left = None 有什么问题?
【讨论】:
null,因为在 PHP 中将变量设置为 null 在大多数情况下会产生类似的行为,就好像你一开始没有定义它一样. Python 中的 None 值与未定义的变量完全不同。 None 与 null 的大多数其他化身非常相似,但是(至少在我们了解更多神秘的细节之前)。
print x并回车。当您尝试打印未定义的变量时,这将产生解释器错误,就像大多数语言一样。但是,如果您定义变量,然后尝试使用 None 清除它,则使用 print x 代码将生成单词 None 作为输出。我是 python 新手,所以我可能会弄错,但这看起来不像是清除变量的行为。
del variable
var = None“清除值”,将变量的值设置为“null”,就像“None”的值一样,但是指向变量的指针仍然存在。
del var 完全删除变量的定义。
如果您想稍后使用该变量,例如为其设置一个新值,即保留变量,None 会更好。
【讨论】:
实际上,这不会删除变量/属性。它所要做的就是将其值设置为None,因此该变量仍将占用内存空间。如果你想从内存中彻底清除所有存在的变量,你可以输入:
del self.left
【讨论】:
clear 而不是 remove。 del 将终止属性和查找。将其设置为 None 比检查 if self.left 更干净,这足以检查节点是否为空。
del,恕我直言,这会更明显在“心理解析”代码时可以忘记变量。
if self.left:,还是更愿意处理可能的 NameError 异常如果你不在任何地方处理它,你的程序就会崩溃?
gcore $PID,你的变量还在内存中。