Don*_*beo 11 python memory garbage-collection
我知道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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
编辑:我编辑了我的例子,它更像我的真实问题.在我的实际问题中,x和y不是列表,而是包含不同长np.array的类
编辑:我能够运行代码:
x = f(z)
x0 = x[0]
print(x0)
y = f(z + 1)
y0 = [0]
print(y0)
Run Code Online (Sandbox Code Playgroud)
Fla*_*lau 12
实现使用引用计数来确定何时应删除变量.
在变量超出范围(如在您的示例中)之后,如果没有剩余的引用,则将释放内存.
def a():
x = 5 # x is within scope while the function is being executed
print x
a()
# x is now out of scope, has no references and can now be deleted
Run Code Online (Sandbox Code Playgroud)
除了列表中的字典键和元素之外,通常没有理由在Python中手动删除变量.
但是,正如在这个问题的答案中所说的那样,使用del可能有助于显示意图.
将两个概念分开是很重要的:名称和值。Python中的变量是引用值的名称。名称具有作用域:定义局部变量(通过为名称分配值)时,变量的作用域是当前函数。当函数返回时,变量消失。但这并不意味着价值就消失了。
值没有范围:它们会一直存在直到没有更多名称引用它们。您可以在函数中创建一个值,然后从该函数返回它,使该函数外部的名称引用该值,直到将来某个点不再引用该值时,该值才会被回收。
更多详细信息(包括图片!)在这里:有关Python名称和值的事实和神话。
| 归档时间: |
|
| 查看次数: |
13741 次 |
| 最近记录: |