【发布时间】:2021-11-13 17:23:52
【问题描述】:
在python中,如果我打开一个文件:
file = open('file.txt','r')
// read the file and stuff
file = None // does this close the file and free up resources?
然后将其设置为其他内容,该文件会关闭吗?这样做会有什么缺点吗?
我知道 'file.close()' 会这样做,但我想知道是否可以将其设置为其他内容。
【问题讨论】:
-
file.close()确实如此。您可以使用with打开文件,它会为您关闭文件。 -
不,不会的。
-
分配
None为什么会关闭文件?变量名只是对内存中对象的引用。file = None表示名称file现在指的是None您的文件对象尚未关闭。 -
明确地说,这与python的C实现完美配合。文件对象引用计数变为零,在
file = None分配期间,底层文件被刷新和关闭。如果您对该文件有更多引用,则在最后一个文件消失之前它不会关闭。如果你有循环引用,它可能在垃圾收集器运行之前不会关闭,或者根本不会关闭。 python 的其他一些实现只使用垃圾回收,因此文件在file =None期间不会关闭。 -
@ThomasHilger - 小说明 - 文件对象知道丢失,因为它的引用计数减少了 1。如果 cpython 看到引用计数为零,它会调用对象的
__del__。文件对象刷新并关闭__del__上的文件。循环引用可以防止引用计数变为零。如果 python 实现总是使用垃圾收集器释放对象,那么关闭将在未来某个不确定的时间发生。
标签: python file garbage-collection