python中的动态内存分配

时间:2013-04-30 12:07:38

标签: python memory numpy ram

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

3 个答案:

答案 0 :(得分:14)

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

但是:numpy是一个扩展模块,可以自己管理,并管理自己的内存。

当我监视python进程的内存使用情况时,我看到在del(M)

之后RAM使用率(驻留集大小)下降
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不拥有内存,释放它将留给另一个库。

答案 1 :(得分:4)

使用del声明:

del M

顺便说一下,float64形状(1000, 1000)的数组只需要7 Mb。如果您遇到记忆问题,问题很可能就在其他地方。

答案 2 :(得分:0)

有两种方式.......

1)。 del M

     But it will delete the array object it self.

2)。 M.clear()

     you can clear the array without deleting M object