gpt4 book ai didi

python - python中的静态内存: do loops create new instances of variables in memory?

转载 作者:IT王子 更新时间:2023-10-28 23:31:43 27 4
gpt4 key购买 nike

我一直在运行 Python 脚本,这些脚本多次调用某些函数,例如 F1(x) 和 F2(x),看起来有点像这样:

x = LoadData()

for j in range(N):
y = F1(x[j])
z[j] = F2(y)

del y

SaveData(z)

如果我保留“del y”行,性能会快很多。但我不明白为什么这是真的。如果我不使用“del y”,那么我很快就会用完 RAM,不得不求助于虚拟内存,一切都会慢下来。如果我使用“del y”,则购买,然后我会反复刷新并重新分配 y 的内存。我想做的是让 y 作为静态内存,并在每次 F1(x) 调用时重用内存。但据我所知,事实并非如此。

另外,不确定它是否相关,但我的数据由 numpy 数组组成。

最佳答案

如果没有 del y,您可能需要两倍的内存。这是因为对于每次循环,y 绑定(bind)到 F1 的前一个值,同时计算下一个值。

一旦 F1 返回 y 就会反弹到那个新值,并且旧的 F1 结果可以被释放。

这意味着 F1 返回的对象占用了相当多的内存

在前几次迭代中展开循环看起来像这样

y = F1(x[0])   # F1(x[0]) is calculated, then y is bound to it
z[j] = F2(y)
y = F1(x[1]) # y is still bound to F1(x[0]) while F1(x[1]) is computed
# The memory for F1(X[0]) is finally freed when y is rebound
z[j] = F2(y)

如果您遇到这种情况,使用 del y 是一个很好的解决方案。

关于python - python中的静态内存: do loops create new instances of variables in memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3305870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com