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

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

需求:

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

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

       import sys

立即学习“Python免费学习笔记(深入)”;

       sys.getrefcount(obj)

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

如何解决内存管理问题?

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

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

#!/usr/bin/python3 import weakrefimport 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 >>>>>')

登录后复制

相关推荐:

PHP管理内存函数 memory_get_usage()使用介绍_PHP教程

以上就是python在循环引用中如何管理内存的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2265508.html

(0)
上一篇 2025年2月27日 08:45:22
下一篇 2025年2月26日 16:03:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python实现用生成器实现可迭代对象的方法

    本文主要为大家详细介绍了python如何使用生成器实现可迭代对象,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 案例分析:               实一个可迭代对象的类,它能迭代出给定范围内所有的素数:     …

    编程技术 2025年2月27日
    200
  • python中高阶函数实现剪枝函数的方法

    本文主要为大家详细介绍了python利用高阶函数实现剪枝函数的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 案例:        某些时候,我们想要为多个函数,添加某种功能,比如计时统计,记录日志,缓存运算…

    编程技术 2025年2月27日
    200
  • python之yeild的定义及使用方法

    yeild简单来说就是一个生成器,生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。 生成器是一个函数 函数所有的参数都会保留 第二次调用此函…

    编程技术 2025年2月27日
    200
  • Python之爬取其他网页

    本文主要为大家分享一篇Python之爬取其他网页的请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 简单的说就是寻找网页中的超链接‘href’,之后将相对网址转变为绝对网址,在用for循环访问他 …

    编程技术 2025年2月27日
    200
  • 如何完整写一个爬虫框架

    本文主要为大家分享一篇如何完整写一个爬虫框架的请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 产生爬虫框架: 1、建立一个scrapy爬虫工程 2、在工程中产生一个scrapy爬虫 3、配置sp…

    2025年2月27日 编程技术
    200
  • python操作文件方法

    本文主要和大家介绍了python操作文件,以及简单的复制备份. 希望能帮助到大家。 1.open函数 python中一切皆对象,所以正常我们打开一个文件的过程是 1.选中文件-打开文件-编辑,复制,删除等操作-关闭文件 放到python中用…

    编程技术 2025年2月27日
    200
  • Linux环境使用pdb调试python的方法

    pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令。        pd…

    编程技术 2025年2月27日
    200
  • vscode无法调试python怎么解决

    本文主要和大家分享vscode无法调试python怎么解决,希望能帮助到大家。 vscode无法调试python问题 提示调试适配器出错 1、保证已安装python调试插件,并升级到最新版本。 2、查看Python版本,升级到最新版本。 3…

    编程技术 2025年2月27日
    200
  • Python语法基础详解

    本文主要和大家分享python语法基础详解,希望能帮助到大家。 Python注释 ”’多行注释”’井号单行注释 登录后复制 python2在文件中存在中文的情况下,必须加以理(两种方式) 在文件头加上#coding=utf-8 在文件头…

    编程技术 2025年2月27日
    200
  • python编程的一些习惯

    本文主要和大家分享python编程的一些习惯,主要以代码的方式和大家讲解,希望能帮助到大家。 1、写好程序文档(格式、自动缩进(vim设置行宽和autoindent)、注释)如下形式: 2、尽量精简代码: 如     可以写成: retur…

    2025年2月27日
    100

发表回复

登录后才能评论