假设我有以下代码,
file1 = open("myfile","w")
#Write to file1...
#Open Second File
file2 = open("otherfile","w")
#Write to file2...
file1.close()
file1 = file2
file2.close()
这会有效地导致所有文件都被关闭,还是 file1 仍然有一个可以写入的打开文件(其他文件)?
是的。(澄清一下,两个文件对象都将被关闭,并且无法写入)变量名只是对底层对象的引用。当您close()
在对象上调用该方法时,它会访问该对象并执行该方法。如果您事后检查这两个对象,您可以知道:
>>> file1
<closed file 'file2.txt', mode 'w' at 0x10045e930>
>>> file2
<closed file 'file2.txt', mode 'w' at 0x10045e930>
>>>
请注意,在这种情况下,您设置file1 = file2
它们都引用同一个关闭的文件对象。如果没有更多对原始file1
对象的引用,则该对象将被垃圾回收。
不,通过您的倒数第二行file1
并file2
引用同一个文件对象,该文件对象由file2.close()
. Python 变量只是指向对象的名称,因此您对一个名称所做的操作会发生在指向该对象的所有名称上。
由于您在重新分配之前关闭了 file1,因此这两个文件都已关闭