rthon中的r替换的rm()函数

时间:2017-01-21 08:10:35

标签: python r data-munging

如何在python中删除变量以清除python中的ram内存?

R

a = 2 
rm(a)

a= 2

如何清除单个变量或一组变量?

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 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上保留对象