当前位置: 首页 > news >正文

[Pyhton]weakref 弱引用

文档中的解释: https://docs.python.org/2/library/weakref.html

wiki 中的解释: 在计算机程序设计中,弱引用。与强引用相对。是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若仅仅被弱引用所引用,则被觉得是不可訪问(或弱可訪问)的,并因此可能在不论什么时刻被回收。主要作用就是降低循环引用。降低内存中不必要的对象存在的数量。

更具体的请查看wiki百科


简单理解:

python中的垃圾回收机制是是引用计数器。当一个对象的引用数目为0的时候,才会被从内存中回收。当出现循环引用的时候,垃圾回收就变得不可靠了。



通过一段代码来比較:

# -*- encoding=utf-8 -*-
'''
author: orangleliu

python 弱引用的小实验
'''

import weakref
import gc

class NewObj(object):
    def my_method(self):
        print "called me "

obj = NewObj()
r = weakref.ref(obj)
gc.collect()
print  r() is obj

obj = 1
gc.collect()  #
print  r() is None, r()

print '*******************'
obj = NewObj()
s = obj
gc.collect()
print s is obj

obj = 1
gc.collect()
print s is None, s

对照结果:

True
True None
*******************
True
False <__main__.NewObj object at 0x024FB870>


非常easy看到结果,弱引用计数器没有添加,所以当obj不在引用NewObj的时候,NewObj对象就被释放了,所以r的引用对象就没了。后面的s对象和我们平时用的引用对象是一样的,s =obj 时候,引用计数器+1,所以当obj不在指向NewObj的时候,s仍然指向NewObj。此时对NewObj的引用计数为2-1=1.


通过实验能够看到了原理。能够这个弱引用一般在什么详细的情况下用呢。怎么避免了循环引用,能够參考 Pymontw中的案例:http://pymotw.com/2/weakref/

实际开发中还没怎么处理过这个问题。以后用到在深入研究


本文出自 “orangleliu笔记本” 博客,转载请务必保留此出处http://blog.csdn.net/orangleliu/article/details/40718121

作者: orangleliu  



相关文章:

  • python之线程和进程(并发编程)
  • Linux系统小技巧(3):sar、last和dmesg的时间戳选项
  • Hibernate-ORM:07.Hibernate中的参数绑定
  • 老男孩教育每日一题-第96天-网站并发知识点:pv-并发与架构设计基础知识
  • Notepad++ 添加MarkdownViewerPlusPlus插件
  • ORACLE查询树型关系start with connect by prior
  • CentOS7安装Python3
  • 漂亮的css
  • 文件操作
  • fetch 从初识到应用
  • oreo自适应图标
  • 容器服务--如何在阿里云容器服务上运行基于TensorFlow的Alexnet
  • centos6.x完全禁用IPv6的方法
  • 细说地方门户网站运营的六大经验
  • 列表常用方法
  • 【Leetcode】104. 二叉树的最大深度
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • docker-consul
  • eclipse(luna)创建web工程
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • interface和setter,getter
  • java中具有继承关系的类及其对象初始化顺序
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • mysql innodb 索引使用指南
  • Python学习笔记 字符串拼接
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • underscore源码剖析之整体架构
  • 关于springcloud Gateway中的限流
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端面试之闭包
  • 听说你叫Java(二)–Servlet请求
  • 为视图添加丝滑的水波纹
  • 无服务器化是企业 IT 架构的未来吗?
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​520就是要宠粉,你的心头书我买单
  • ​queue --- 一个同步的队列类​
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)SpringCloud 整合Python
  • (4.10~4.16)
  • (9)STL算法之逆转旋转
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (排序详解之 堆排序)
  • (三)Honghu Cloud云架构一定时调度平台
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)人的集合论——移山之道
  • ***通过什么方式***网吧
  • **CI中自动类加载的用法总结
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core中的去虚
  • .NET 分布式技术比较
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET导入Excel数据