7

我创建了一个大的多维数组Mnp.zeros((1000,1000))经过一定数量的操作后,我不再需要它了。如何在程序执行期间动态释放 RAM?为我做M=0吗?

4

3 回答 3

16

一般来说不能。即使您删除了对对象的所有引用,它也留给 python 实现来重用或释放内存。在 CPython 上,您可以调用gc.collect()强制垃圾收集运行。但是,虽然这可能会回收内存,但不一定会将其返回给操作系统。

但是:numpy 是一个扩展模块,它做自己的事情,并管理自己的内存。

当我监视 python 进程的内存使用情况时,我看到 RAM 使用情况(驻留集大小)在之后下降del(M)

In [1]: import numpy as np

In [2]: M = np.zeros((1000,1000))

In [3]: del(M)

In [4]: 

在启动 IPython 之后:

slackbox:~> ps -u 77778
USER     PID %CPU %MEM    VSZ   RSS TT  STAT STARTED    TIME COMMAND
rsmith 77778  0.0  0.5 119644 22692  0  S+    2:37PM 0:00.39 /usr/local/bin/py

导入 numpy (1) 后:

slackbox:~> ps -u 77778
USER     PID %CPU %MEM    VSZ   RSS TT  STAT STARTED    TIME COMMAND
rsmith 77778  1.0  0.8 168548 32420  0  S+    2:37PM 0:00.49 /usr/local/bin/py

创建数组 (2) 后:

slackbox:~> ps -u 77778
USER     PID %CPU %MEM    VSZ   RSS TT  STAT STARTED    TIME COMMAND
rsmith 77778  0.0  1.0 176740 40328  0  S+    2:37PM 0:00.50 /usr/local/bin/py

调用del(3) 后:

slackbox:~> ps -u 77778
USER     PID %CPU %MEM    VSZ   RSS TT  STAT STARTED    TIME COMMAND
rsmith 77778  0.0  0.8 168548 32496  0  S+    2:37PM 0:00.50 /usr/local/bin/py
slackbox:~> 

所以在这种情况下使用del()可以减少使用的 RAM 量。

请注意,numpy 有一个例外。Numpy 可以使用由另一个扩展库分配的内存。在这种情况下,numpy 对象被标记为 numpy 不拥有内存,并将其释放留给另一个库。

于 2013-04-30T12:41:04.940 回答
4

使用del语句:

del M

顺便说一句,一个float64形状数组(1000, 1000)只需要 7 Mb。如果您遇到内存问题,则问题可能出在其他地方。

于 2013-04-30T12:23:56.073 回答
1

有两种方法......

1)。德尔米

     But it will delete the array object it self.

2)。M.clear()

     you can clear the array without deleting M object
于 2013-04-30T12:23:40.863 回答