python - python中的动态内存分配

标签 python memory numpy ram

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

最佳答案

一般你不能。即使您删除了对对象的所有引用,它也留给 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 有一个异常(exception)。 Numpy 可以使用由另一个扩展库分配的内存。在这种情况下,numpy 对象被标记为 numpy 不拥有内存,并将其释放留给其他库。

关于python - python中的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16299546/

相关文章:

python - 使用 Python 自动识别字体

python - 解释pythonic表[n :m] where m does not mean x-th element

python - Vim 语法文件 - 函数名末尾加引号 [dg 编程语言]

c - 在c中,宏__FILE __,__ LINE__和__PRETTY_FUNCTION__是否分配内存?

python - 比较两个 numpy 数组

Python(scipy)从文本文件导入时间

python - 从字符串中提取列表

java - 通过 "-XX:PermSize=192m -XX:MaxPermSize=2g -Xms2g -Xmx2g"在 linux 中通过终端增加内存

c++ - 如何有效地从 std::deque 创建 D3D 缓冲区

python - 按列索引切片 numpy.ndarray