【发布时间】:2018-07-16 03:23:46
【问题描述】:
我想了解一下 python numpy 数组中的内存分配行为。问题如下:
当较小的数组替换较大的数组时,会发生什么情况?示例如下:
[1] arr = np.rand.randint(1, 10, size=(2000, 3000)
...
[100] arr = np.ran.randint(1, 10, size=(20, 30)
在[100] 行,arr 对象的大小将随着其减小的大小而减小。所以我想知道两件事:
- 比
(20, 30)新大小更大的区域是否仍会作为垃圾内存在pc内存中? - 如果上述情况属实,我是否需要在
[100]行之前显式使用del arr?
脚注:我提出问题的主要原因是我正在编写一个主要基于 numpy 的大型 python 程序。这是我第一次编写用于大型数据集的程序(正常大小为 50k 行,7 列)。
我发现每次我重新运行程序时,内存都会不断增加,而不是我期望它会再次恢复到原来的值,因为我正在替换所有变量(即使我明确写入 gc.collect() 后,内存也会不断增加很多行,还为我的变量写了一些del)。
我现在的怀疑是用较小的数组替换时可能是更大的数组,内存仍在 ram 中,只是没有被映射(我上面的问题)。
如果您对我能解决这个内存泄漏问题有什么意见,那也会很有帮助。时长
【问题讨论】:
标签: python-3.x numpy memory-leaks