鱼C论坛

 找回密码
 立即注册
查看: 1580|回复: 4

[技术交流] py第41讲课后题,动动手的第一题有个疑问

[复制链接]
发表于 2020-3-6 14:23:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
感觉代码里面的del self.new_file这一步有点多余,不需要写,也可以释放内存
class FileObject:
    '''给文件对象进行包装从而确认在删除时文件流关闭'''

    def __init__(self, filename='sample.txt'):
        #读写模式打开一个文件
        self.new_file = open(filename, 'r+')

    def __del__(self):
        self.new_file.close()
        del self.new_file
    def enter(self,string=''):
        self.new_file.write(string)
上面是小甲鱼提供的代码,为了检验这个del,我加了个enter方法进去
假如我实例化 f=FileObject('1.txt')
首先删除实例化对象的时候,用del d 来删除这个实例对象的时候,如果没有别的引用应该就直接被垃圾回收机制回收掉了
也就是这时候已经不存在这个f,相应的也执行了里面的关闭文件了,然后再把储存这个变量的内存释放掉。
在shell运行的时候,也证明了f.close()只是关闭了文件,但是存储f这个内存还没被释放
f=open('123.txt')
>>> f.close()
>>> f
<_io.TextIOWrapper name='123.txt' mode='r' encoding='cp936'>
>>> del f
>>> f
Traceback (most recent call last):
  File "<pyshell#115>", line 1, in <module>
    f
NameError: name 'f' is not defined

但是考虑到课上小甲鱼说的一种情况,实例化f之后,我通过a=f来给这个实例贴多一个标签
这时候,只有del a  和 del f都执行了,才会执行类对象里面的del方法,这时候反过来看,就感觉del self.new_file这一步有点多余了
f=F('123.txt')
>>> a=f
>>> id(a)
2509003960960
>>> id(f)
2509003960960
>>> del a
>>> f.enter('123')
>>> a.enter('123')
Traceback (most recent call last):
  File "<pyshell#134>", line 1, in <module>
    a.enter('123')
NameError: name 'a' is not defined

同时如果我不写这一句del self.new_file,当我删除了f 和 a的时候,也是同样的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-6 14:29:22 | 显示全部楼层
很好,说明你的想法是正确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 16:04:11 | 显示全部楼层
wuqramy 发表于 2020-3-6 14:29
很好,说明你的想法是正确的

大佬,确定是正确的么,就是平时写del的时候,里面是不用再特意写这个del对么
我怕小甲鱼这么写是有原因,是为了完成什么东西,但是我能力有限,试不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 17:46:44 | 显示全部楼层
个人觉得加和不加 del self.new_file 都可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 19:51:51 | 显示全部楼层
zltzlt 发表于 2020-3-11 17:46
个人觉得加和不加 del self.new_file 都可以

好的,谢谢版主答疑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 17:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表