Python打开与内存泄漏
文件什么时候会被关闭呢?
# Read all data from input file
mergeData = open( "myinput.txt","r" )
allData = mergeData.read()
mergeData.close()
我可以用这段代码替代吗?
allData = read.open( "myinput.txt","r" )
我在想,文件会在什么时候关闭?是当这条语句执行完的时候关闭,还是要等到程序结束才关闭呢?
2 个回答
2
是的,可以这样做。不会出现内存泄漏或类似的问题。
当通过 open()
打开的 file
对象超出作用域并被垃圾回收时,文件句柄会很快被关闭。
不过,如果你想的话,可以考虑这样做:
with open('myinput.txt') as f:
data = f.read()
这样可以确保在你完成操作后,文件会立即被关闭。
8
CPython会在文件对象被删除时自动关闭这个文件。这个文件对象会在它的引用计数降到零时被删除,也就是说没有其他变量再指向它了。所以如果你在一个函数里使用了mergeData
,当这个函数执行完毕后,局部变量会被清理,文件也会被关闭。
比如说,如果你用allData = open("myinput.txt", "r").read()
,那么当.read()
执行完返回结果时,引用计数就会降到0,这在CPython中意味着文件会立刻被关闭。
而在其他一些实现,比如Jython或IronPython,文件对象的生命周期管理方式不同,文件对象被真正删除的时机可能会晚很多。
不过,使用文件的最佳方式是作为上下文管理器来使用:
with open( "myinput.txt","r" ) as mergeData:
allData = mergeData.read()
这样会自动调用.close()
来关闭mergeData
。你可以查看file.open()
的文档和with
语句的文档。