如何在python中删除变量以清除python中的ram内存?
R :
a = 2
rm(a)
蟒:
a= 2
如何清除单个变量或一组变量?
答案 0 :(得分:2)
使用del
>>> a=2
>>> del a
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
答案 1 :(得分:2)
python内存清理由垃圾收集器管理。在CPython上它基于引用计数。 你可以像这样明确地调用垃圾收集器:
import gc
gc.collect()
这可以在调用使用ram方面的大变量的函数之后完成。 请注意,您不必显式调用此函数,因为最终将调用垃圾收集器以自动释放ram。
如果您仍想显式删除变量,可以使用del语句(如前所述),如下所示:
x = [1, 2, 3]
i = 42
s = 'abc'
del s # delete string
del x[1] # delete single item in a list
del x, i # delete multiple variables in one statement
为了更好地理解del
的作用及其局限性,让我们看一下python如何在ram上存储变量。
x = [1, 2, 3]
上面的代码在名称x
到列表[1, 2, 3]
之间创建了一个存储在堆上的引用。 x
只是指向该列表的指针。
x = [1, 2, 3]
y = x
x is y # True
在这个示例中,我们有引用x
和堆[1, 2, 3]
上的列表,但这个新的y
变量是什么?它只是另一个指针,意味着现在我们有两个指向同一[1, 2, 3]
列表的指针。
返回del
语句,如果我们删除一个不会影响列表或其他变量的变量
x = [1, 2, 3]
y = x
del x
print(y) # prints [1, 2, 3]
所以在这里我们不会释放列表,只减少引用计数到列表,但我们仍然有y
指向它。
为了解决这个问题,我们可以使用weakref模块将y
指向列表,当删除x
时,列表也会被删除。
gc.collect()
del x, y
删除指向特定对象的所有指针以将其释放weakref
模块以避免在删除所有其他对它们的引用后在ram上保留对象