变量何时从内存中释放?

3

假设我定义了一个函数,它会创建一个列表,并逐个打印列表中的项目(没有实际用途,仅为示例):

import os

def build_and_print():
    thingy = os.walk('some directory')
    for i in thingy:
        print i

if __name__ == '__main__:
    build_and_print()

如果构建的`thingy`非常大,它可能会占用大量内存,那么在什么时候才会释放它?
Python是否将变量`thingy`存储到脚本运行完毕或构建/使用它的函数运行完毕为止?

6
不要将“list”作为变量名。 - Bhargav Rao
2
只要名称超出范围,它就准备好进行垃圾回收 - 因此仅在函数调用后。当它被垃圾回收时 - 通常尽快,但一般来说你不知道。 - Łukasz Rogalski
1个回答

1

变量一旦超出其作用范围,就会被垃圾回收器回收。

在此处查看代码,您可以看到收集器。转到收集函数,其中的注释很好地解释了该过程。


2
是的和不是的。在这种情况下,是的,但一般来说不是。 - Martijn Pieters
1
@Martijn,您介意再详细解释一下吗? - Joe Smart
@JoeSmart:Python使用引用计数。当引用计数降为0时,对象将从内存中删除。函数中的局部名称只是引用,当作用域结束时这些引用会被清除,但仍然可能存在其他对该对象的引用。 - Martijn Pieters
1
你所链接的代码和大多数对象删除操作没有任何关系。该函数用于跟踪循环引用(垃圾回收必须实际跟踪的内容)。 - Martijn Pieters
1
@JoeSmart: 切记,当一个Python对象被释放时,它的内存会返回给Python的内存区域,而不是返回给操作系统。这些内存区域可能会被释放给操作系统,但并不一定会如此。请参阅python - memory not being given back to kernel以及该页面上的链接:Why doesn't Python release the memory when I delete a large object? - PM 2Ring
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接