如果通过设置清除变量,性能或内存是否会有明显差异
x = 'something'
x = None
Run Code Online (Sandbox Code Playgroud)
而不是
x = 'something'
del x
Run Code Online (Sandbox Code Playgroud)
对于很多变量?
tim*_*geb 10
如果是对该字符串对象的最后一次引用,则两次都'something'将回收内存.在第一个示例中,您使用了更多的内存,因为您保留了名称. xx
我做了一些搜索,看起来内存将立即回收:进一步阅读.
然而,存在概念上的差异,并且您的程序将表现不同.当你del x,你取消绑定名称x,并尝试使用该名称将引发NameError:
>>> x = 'something'
>>> del x
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)
当你设置x = None你重新绑定 x到该对象是一个名字None,而且还可以使用变量如预期.例如,对于truthy/falsy测试:
>>> x = None
>>> if not x:
... print('hello cshin9!')
...
hello cshin9!
Run Code Online (Sandbox Code Playgroud)
将变量设置为 None 或删除它都会导致x释放对对象的引用。主要区别在于x = None名称x仍然存在,即使它现在指向不同的对象 ( None)。使用时del该名称也会被删除。
对于垃圾收集器来说,没有区别。del不强制对引用的对象进行任何垃圾回收。
编辑:正如@Viroide指出的,使用del会在尝试调用变量时引发异常x。