文件已关闭或仍在内存中?

时间:2012-01-15 06:49:14

标签: python

lines = len(open(filename, 'r').readlines()) //or
open(filename, 'w').writelines(lines)

在python中这行是否会关闭打开的文件?如果不是如何关闭未分配给任何变量的文件?这些类型的编码也被称为,#"引用语义"?

2 个答案:

答案 0 :(得分:6)

Python的垃圾收集器会在您上次使用它们之后的某个时间清理打开的文件对象(这可能会立即也可能不会立即生效)。最好是明确的,例如:

with open(filename, 'r') as f:
    lines = len(f.readlines())

with open(filename, 'w') as f:
    f.writelines(lines)

标准CPython实现使用引用计数,并且倾向于非常快速地清理对象。但是,其他实现(如IronPython)处理垃圾收集的方式也不同,可能行为不一样。

答案 1 :(得分:1)

在CPython中,引用计数将导致文件立即关闭。在其他版本的Python中,它将保持打开状态,直到定期垃圾收集器运行。