最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

python在循环引用中如何管理内存

来源:懂视网 责编:小采 时间:2020-11-27 14:22:30
文档

python在循环引用中如何管理内存

python在循环引用中如何管理内存:python中通过引用计数来回收垃圾对象,在某些环形数据结构(树,图……),存在对象间的循环引用,比如树的父节点引用子节点,子节点同时引用父节点,此时通过del掉引用父子节点,两个对象不能被立即释放。需求:如何解决此类的内存管理问题?如何查询一个对
推荐度:
导读python在循环引用中如何管理内存:python中通过引用计数来回收垃圾对象,在某些环形数据结构(树,图……),存在对象间的循环引用,比如树的父节点引用子节点,子节点同时引用父节点,此时通过del掉引用父子节点,两个对象不能被立即释放。需求:如何解决此类的内存管理问题?如何查询一个对

python中通过引用计数来回收垃圾对象,在某些环形数据结构(树,图……),存在对象间的循环引用,比如树的父节点引用子节点,子节点同时引用父节点,此时通过del掉引用父子节点,两个对象不能被立即释放。

需求:

如何解决此类的内存管理问题?

如何查询一个对象的引用计数?

import sys

sys.getrefcount(obj)

# 查询引用计数必多 1 ,因为object也引用 查询对象

如何解决内存管理问题?

  • 通过weakref,进行弱引用,当del时候,不再引用,在引用方添加weakref.ref(引用obj);

  • 使用引用的时候,需要用到函数调用的形式

  • #!/usr/bin/python3
     
    import weakref
    import sys
     
     
    class Data(object):
     def __init__(self, value, owner):
     self.value = value
     
     # 声明弱引用,owner为Node类本身
     self.owner = weakref.ref(owner)
     
     # 通过函数调用的方式访问引用对象
     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):
     
     # 把类本身,也当做参数传入Data类中
     self.data = Data(value, self)
     
     # 自定义对象名,容易辨认
     def __str__(self):
     return 'Node'
     
     def __del__(self):
     print('in_node.__del__')
     
     
    if __name__ == '__main__':
     node = Node(100)
     print(node.data)
     
     # 打印node对象的引用计数
     print(sys.getrefcount(node) - 1)
     
     # 当删除node对象时候,Data实例对象在引用计算为0也相应释放
     del node
     
     input('del done >>>>>')

    文档

    python在循环引用中如何管理内存

    python在循环引用中如何管理内存:python中通过引用计数来回收垃圾对象,在某些环形数据结构(树,图……),存在对象间的循环引用,比如树的父节点引用子节点,子节点同时引用父节点,此时通过del掉引用父子节点,两个对象不能被立即释放。需求:如何解决此类的内存管理问题?如何查询一个对
    推荐度:
    标签: 内存 如何 管理
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top