python打开和内存泄漏

his*_*amp 0 python file-io

什么时候关闭文件?

    # Read all data from input file
    mergeData = open( "myinput.txt","r" )
    allData = mergeData.read()
    mergeData.close()
Run Code Online (Sandbox Code Playgroud)

我可以替换这个代码吗?

allData = read.open( "myinput.txt","r" )
Run Code Online (Sandbox Code Playgroud)

我想知道什么时候文件会被关闭?会在语句运行时关闭吗?或等到程序退出。

Mar*_*ers 5

当对象被删除时,CPython 会自动关闭文件对象;当它的引用计数下降到零(没有更多的变量引用它)时,它被删除。所以如果你mergeData在一个函数中使用,一旦函数完成,局部变量就会被清除并关闭文件。

如果您使用allData = open( "myinput.txt","r" ).read()引用计数下降到 0 的时刻.read()返回,并且在 CPython 上这意味着文件在那里关闭。

在 Jython 或 IronPython 等其他实现中,对象生命周期的管理方式不同,实际删除对象的时间可能要晚得多。

不过,使用文件的最佳方式是作为上下文管理器:

with open( "myinput.txt","r" ) as mergeData:
    allData = mergeData.read()
Run Code Online (Sandbox Code Playgroud)

这就要求.close()mergeData 自动。请参阅file.open()文档with声明的文档。