我在一个更大的程序中有一段代码看起来像这样(变量重命名以保护无辜者):
import numpy as np
import sympy as sym
from sympy import lambdify
from sympy.core.cache import clear_cache()
#Empty array for later use.
myarray = [[None for i in range(N)] for j in range(N)]
for i in range(N):
for j in range(N):
derivative = sym.diff(somearray[i], someotherarray[j])
numericalderivative = lambdify(variablearray, derivative)
myarray[i][j] = numericalderivative
当它运行时,它会慢慢地膨胀到绝对大量的内存(大约32 GB,可能更高)。我希望最终结果占用大量内存(N约为455,因此最终数组将有207,025个函数对象,每个函数对象都有相当多的术语)。但是,它不应该占用这个很多内存。 实际上,最终内存远低于循环期间的最大内存:更像是2 GB。
我还在第二个循环结束时尝试了一些手动垃圾收集:
del derivative
del numericalderivative
clear_cache()
gc.collect()
之前我正在使用列表解析来完成它,但是我切换到循环以查看它是否能解决内存问题,例如在必要时更容易坚持垃圾收集命令。但是,更改为列表理解确实会改变问题的表现形式:RAM显示在Windows上的已提交RAM中,而不是使用RAM。
可能的原因:
在Windows 2.7和Linux中的Python 2.7(Anaconda)中都会出现此问题。
造成这种临时内存爆炸的原因是什么?