Python del 和垃圾回收、弱引用

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

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

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

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容