美文网首页
Python del 和垃圾回收、弱引用

Python del 和垃圾回收、弱引用

作者: 燕城白夜 | 来源:发表于2019-04-13 15:40 被阅读0次

    del命令删除的是对象的引用。当删除的是对象的最后一个引用或无法得到对象时(只存在于两个对象之间的相互引用时,gc会判断两个对象都无法获取进而进行销毁)会导致对象会被当做垃圾回收。

    (有个__del__特殊方法,但是它不会销毁实例。它的作用是在Python解释器即将销毁实例时会调用该方法,给实例最后释放外部资源的机会。除非特殊情况一般不要试图实现该方法。)

    简单总结:del不会销毁对象实例,但是可能会导致对象不可获取,从而被删除。

    bye回调函数会在销毁对象时调用。

    上面的例子引出了一个疑问:weakref.finalize函数为了监控对象和调用回调,必须要有引用,那上述例子中的s1对象为什么还是被销毁了?这是应为weakref.finalize函数持有的是s1对象的弱引用。

    对象在内存中的存在依赖于引用,但我们有时只需要引用对象一段对象。

    弱引用在缓存中很有用,因为我们不想因为被缓存引用着而始终保持缓存对象。

    注意不是每个Python对象都可以作为弱引用的目标,这取决于具体Python的解释器。

    相关文章

      网友评论

          本文标题:Python del 和垃圾回收、弱引用

          本文链接:https://www.haomeiwen.com/subject/kuvlwqtx.html