我用 np.zeros((1000,1000))
创建了一个大的多维数组 M
。经过一定数量的操作后,我不再需要它了。如何在程序执行期间动态释放 RAM? M=0
会为我做吗?
最佳答案
一般你不能。即使您删除了对对象的所有引用,它也留给 python 实现来重用或释放内存。在 CPython 上,您可以调用 gc.collect()
强制垃圾收集运行。但是,虽然这可能会回收内存,但不一定会将其返回给操作系统。
但是:numpy是一个扩展模块,做自己的事,管理自己的内存。
当我监控 python 进程的内存使用时,我看到在 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 有一个异常(exception)。 Numpy 可以使用由另一个扩展库分配的内存。在这种情况下,numpy 对象被标记为 numpy 不拥有内存,并将其释放留给其他库。
关于python - python中的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16299546/