[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
[Pyhton]weakref 弱引用的更多相关文章
- weakref:对象的弱引用
介绍 weakref支持对象的弱引用,正常的引用会增加对象的引用计数,并避免它被垃圾回收.但结果并不是总和期望的那样,比如有时候可能会出现一个循环引用,或者有时候需要内存时可能要删除对象的缓存.而弱引 ...
- 关于Java的软引用及弱引用
概念介绍 1 Reference 描述一个对象的引用.其内部维持一个queue引用,用于跟踪对象的回收情况,当对象被回收时将当前reference引用入队 2 SoftRef ...
- 关于C语言中的强符号、弱符号、强引用和弱引用的一些陋见,欢迎指正
首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样 ...
- 浅谈C语言中的强符号、弱符号、强引用和弱引用
摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...
- Python3.2官方文档-日志和弱引用
8.5 日志 Logging模块提供了一些功能全面和灵活的日志系统.最简单的形式就是把日志信息发送到一个文件或sys.stderr; import logging logging.debug('Deb ...
- 合理使用软引用和弱引用,提升JVM内存使用性能
在项目运行时,OOM异常是比较处理的,因为从日志看出的发生异常的代码点可能仅仅是最后一根稻草,从中可能未必能发现OOM的原因,而且OOM未必是固定重现的. 上医治未病,与其等OOM问题发生时再通过看日 ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少大对象堆的碎片,在某些情况下强制执行完整GC,按需压缩大对象堆,在GC前收到消息通知,使用弱引用缓存对象
减少大对象堆的碎片 如果不能完全避免大对象堆的分配,则要尽量避免碎片化. 对于LOH不小心就会有无限增长,但LOH使用的空闲列表机制可以减轻增长的影响.利用这个空闲列表,我们可以在两块分配区域中间找到 ...
- 通过软引用和弱引用提升JVM内存使用性能的方法(面试时找机会说出,一定能提升成功率)
初学者或初级程序员在面试时如果能证明自己具有分析内存用量和内存调优的能力,这相当有利,因为这是针对5年左右相关经验的高级程序员的要求.而对于高级程序员来说,如果能在面试时让面试官感觉你确实做过内存调优 ...
- Java中的强引用和弱引用
旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81114944 一.强引用 如下是强引用的经典 ...
随机推荐
- Java web 服务启动时Xss溢出异常处理笔记
本文来自网易云社区 作者:王飞 错误日志 错误日志要仔细看,第一行不一定就是关键点,这个错误出现的时候,比较靠后,其中关键行就是下面这句. Caused by: java.lang.IllegalSt ...
- Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k is a positive integer and is less than or equal to the length of the linked list. If the number of
class Solution { public: ListNode *reverseKGroup(ListNode *head, int k) { if (!head || !(head->ne ...
- xtu数据结构 D. Necklace
D. Necklace Time Limit: 5000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d Java class ...
- Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017)
昨晚打得小号,虽然很菜,可是还是涨了些rating A. Arpa and a research in Mexican wave time limit per test 1 second memory ...
- TOJ 5020: Palindromic Paths
5020: Palindromic Paths Time Limit(Common/Java):10000MS/30000MS Memory Limit:65536KByteTotal Su ...
- PTA 08-图9 关键活动 (30分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/719 假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它 ...
- iOS学习笔记15-序列化、偏好设置和归档
一.本地持久化 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件( ...
- bzoj2748 [HAOI2012]音量调节 背包
Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...
- WMAP 启动报错 PHP- 提示缺少 msvcr110.dll 的问题
问题描述: 启动 php-cgi 时如果提示缺少 msvcr110.dll 问题原因: 缺少 vc++ 2012 运行库 问题解决: 需要安装 vcredist_x64.exe 或 vcre ...
- NOIP 前夕 模板整理
归并排序: #include<iostream> #include<cstdio> #include<cstring> using namespace std; ] ...