import gc
import os
gc.disable()
open('tmp.txt', 'w').close()
class A:
def __init__(self):
self.fo = open('tmp.txt')
a = A()
os.remove('tmp.txt')
当我执行脚本时,我得到了PermissionError: [WinError 32]
。然后我尝试了这个:
import gc
import os
gc.disable()
open('tmp.txt', 'w').close()
class A:
def __init__(self):
self.fo = open('tmp.txt')
a = A()
# or a = None
del a
os.remove('tmp.txt')
虽然这次成功了,但我不知道原因。你能告诉我为什么吗?
我的python版本是3.5.2。
答案 0 :(得分:2)
在Windows上,如果某个程序有句柄,则无法删除文件。
删除实例时,手动/强制垃圾收集句柄(因为没有其他对象在del a
上有引用),并关闭文件,这说明它有效。
另见how to release used memory immediately in python list?,其中解释了
a = None
或
a
如果没有其他对象拥有对它的引用,立即释放{{1}}的内存。