【问题标题】:If i open a file, then set it to a variable, does it close the file? [duplicate]如果我打开一个文件,然后将其设置为一个变量,它会关闭文件吗? [复制]
【发布时间】: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


【解决方案1】:

除非您使用with open,否则每次打开文件时都应始终关闭它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2012-11-24
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2020-06-02
    相关资源
    最近更新 更多