【问题标题】:When is a variable released from memory? [duplicate]什么时候从内存中释放变量? [复制]
【发布时间】:2015-09-04 10:36:52
【问题描述】:

假设我定义了一个函数,它构建一个列表,然后将列表中的项目一个一个打印出来(没有实际用处,只是一个例子:

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 直到脚本完成运行或直到构建/使用它的函数完成运行?

【问题讨论】:

  • 不要使用list作为变量名
  • 一旦名称超出范围,它将准备好进行垃圾收集 - 所以在函数调用之后。什么时候会被垃圾回收 - 可能会尽快,但您通常不知道。

标签: python memory


【解决方案1】:

一旦变量超出范围,它就会被垃圾收集器收集。

你可以看到收集器code here.去收集功能,有cmets很好的解释了这个过程。

【讨论】:

  • 是和不是。在这种情况下是的,一般来说,不是。
  • 您介意扩展@Martijn 吗?
  • 从技术上讲,一旦它不再被引用,它就有资格被收集。如果您从函数内部返回闭包,则有必要准确调查 Python 编译器如何处理词法范围内未引用的变量,以查看引用是否保留在整个词法范围内,或者只是引用的变量。跨度>
  • 您链接到的代码与大多数对象删除的工作方式无关。该函数用于跟踪循环引用(垃圾收集必须实际跟踪的东西)。
  • @JoeSmart:请记住,当 Python 对象被释放时,它的内存会返回到 Python 的内存区域,而不是返回到操作系统。那些内存区域可能被释放到操作系统,但不是必须的。请参阅python - memory not being given back to kernel 和该页面上的链接:Why doesn't Python release the memory when I delete a large object?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多