【发布时间】:2014-10-06 19:31:20
【问题描述】:
我知道 python 有一个自动垃圾收集器,所以它应该在不再引用变量时自动删除变量。
我的印象是局部变量(函数内部)不会发生这种情况。
def funz(z):
x = f(z) # x is a np.array and contains a lot of data
x0 = x[0]
y = f(z + 1) # y is a np.array and contains a lot of data
y0 = y[0]
# is x and y still available here?
return y0, x0
del x 是节省内存的正确方法吗?
def funz(z):
x = f(z) # x is a np.array and contains a lot of data
x0 = x[0]
del x
y = f(z + 1) # y is a np.array and contains a lot of data
y0 = y[0]
del y
return y0, x0
编辑:我已经编辑了我的示例,使其更类似于我的实际问题。
在我的真正问题中,x 和 y 不是列表,而是包含不同大 np.array 的类。
编辑:我能够运行代码:
x = f(z)
x0 = x[0]
print(x0)
y = f(z + 1)
y0 = [0]
print(y0)
【问题讨论】:
-
我的印象是局部变量(函数内部)不会发生这种情况。 是什么让您有这种印象?函数结束时清除本地名称;当它们的引用计数下降到 0 时,它们引用的对象将被删除就像 Python 中的其他任何地方。
-
我有一个函数可以运行一些独立的脚本。我收到内存不足错误。我知道我能够独立运行这些脚本
-
@Donbeo:当函数运行脚本时,你是如何运行它们的?它们是作为单独的进程还是作为模块运行?
-
@MartijnPieters OP 可能会因为 python 中的“范围”与许多其他语言中的“范围”不同而感到困惑。例如,
for循环没有定义新的作用域,其变量在最后一次迭代后仍然有效。
标签: python memory garbage-collection