python中的动态内存分配

2024-05-28 23:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 数量npzeros动态数组ram手术程序执行
3条回答

使用del语句:

del M

顺便说一下,一个float64形状数组(1000, 1000)只需要7 Mb。如果你有记忆问题,很可能问题出在别处。

有两种方式。。。。。。。

1)。德尔姆

     But it will delete the array object it self.

(第二章)。M、 清除()

     you can clear the array without deleting M object

general中,您不能这样做,即使您删除了对某个对象的所有引用,也要留给python实现来重用或释放内存。在CPython上,可以调用^{}来强制运行垃圾回收。但是,虽然这可能会回收内存,但并不一定会将其返回到操作系统。

但是: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不拥有内存,释放内存留给另一个库。

相关问题 更多 >

    热门问题