Python 循环内存泄漏



我正在研究一个更大的项目,在那里我看到内存使用量连续增加。代码类似于我在下面狙击的演示 - 只是没有随机数和更有用的计算......但效果是一样的。运行这个我看到内存使用量增加

为什么会发生这种情况,我该如何防止这种情况? 感谢您的每一个有用的答案:)

我正在使用 python 3

n= 10000000
indat = np.random.random(n*4)
data = np.zeros(n*3)
d = [0,0,0,0]
for i in range(n):  
d = indat[i*4:i*4+4]
data[i*3]  = np.sqrt(np.abs(d[0]+d[1]*d[3]))
data[i*3+1]= np.sqrt(np.abs(d[3]+d[2]*d[3]))
data[i*3+2]= np.sqrt(np.abs(d[2]+d[1]*d[3]))

编辑: 我尝试了更多的东西:

1:这按预期工作 - 没有内存增加

for i in range(n):  
print(i, end="r")

2:但随之而来的是增长。

for i in range(n):  
data[i] = indat[i]**2

所以至少这个简单的副本没有像我期望的那样工作...... 如何让 python 将我的计算结果存储在已分配的内存中?

实际上,内存使用量增加是因为 numpy 优化了内存中零数组的存储。因此,当您填写大量零时,numpy 无法有效地存储它。

观察如果创建零数组,内存使用情况会发生什么情况:

data = np.zeros(1000000000)

然后看看当你创建一个数组时会发生什么:

data = np.ones(1000000000)

您将看到内存使用量急剧增加。

最新更新