python - python中r替代的rm()函数

标签 python r data-munging

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

R:

a = 2 
rm(a)

Python:

a = 2

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

最佳答案

python 内存清理由垃圾收集器管理。在 CPython 上,它基于引用计数。 您可以像这样显式调用垃圾收集器:

import gc
gc.collect()

这可以在调用使用 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 语句

更好地理解什么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 上

关于python - python中r替代的rm()函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777119/

相关文章:

r - gbm 函数下标越界

根据单列正则表达式中的多个项目,使用附加行 reshape data.frame

Python,Pandas - 将函数应用于数据框中的列以仅替换某些项目的问题

python - "An integer is required error received for UDP server"

python - OpenCV 2.0 与 MacPorts 的 SWIG Python 绑定(bind)

rJava 安装在 macOS 10.14 上失败

php - 将 PHP 关联数组映射到 PDO 准备语句

r - 如何在R中做一种混合值

python - 将迭代器分配给 Python 切片

python, tkinter - 框架高度和宽度参数值无效