python(Class7)

内存管理之循环引用


在Python3.x中,内存管理问题基本上不会出现,类似与OC中的ARC机制
在Python2.x中,可以考虑使用gc.collect()的强制回收方法,但是gc无法解决循环引用的问题,需要通过weakref方法才能解决:in Node.__del__ in Data.__del__


import gc
import weakref


class Data(object):
    def __init__(self, value, owner):
        self.owner = weakref.ref(owner)
        self.value = value

    def __str__(self):
        return "%s's data, value is %s" % (self.owner(), self.value)

    def __del__(self):
        print('in Data.__del__')


class Node(object):
    def __init__(self, value):
        self.data = Data(value, self)  # 循环引用

    def __del__(self):
        print('in Node.__del__')

node = Node(100)
del node

# 在Python3.x中,gc.collect()的强制回收方法,可以解决循环引用的问题:in Node.__del__ in Data.__del__
# 但是在Python2.x中,需要用weakref才能处理循环引用的问题
# gc.collect()

input('wait...')




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

推荐阅读更多精彩内容

  • 1.元类 1.1.1类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这...
    TENG书阅读 1,360评论 0 3
  • 一元类 1类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成...
    五行缺觉阅读 1,127评论 0 1
  • pypy支持的扩展模块(对应Python/Modules/中的模块) pypy支持的内建模块:__builtin_...
    JianMing阅读 4,912评论 0 0
  • 文/自在如风 学过心理学知道,瑞士心理学家荣格曾提出“内向”和“外向”概念。外向的人会把生命力指向外部世界,他们注...
    南音烟雨阅读 421评论 4 10
  • 在灿烂的阳光中起床吃早餐,盘子和食物光泽宁静而明亮不耀眼。做人亦如是。 早饭后兴致满满地去海边。出了酒店的门发现左...
    倾新阅读 385评论 0 0