Python引用计数操作示例


Posted in Python onAugust 23, 2018

本文实例讲述了Python引用计数操作。分享给大家供大家参考,具体如下:

为了简化内存管理,Python通过引用计数机制实现了自动的垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。

import ctypes
def get_ref(obj):
  """ returns a c_size_t, which is the refcount of obj """
  return ctypes.c_size_t.from_address(id(obj))
l = [1,2,3,4]
l2 =l
l_ref = get_ref(l)
print l_ref
del l
print l_ref
del l2
print l_ref
another_list = [0, 0, 7]
a_ref = get_ref(another_list)
print a_ref

输出:

c_ulong(2L)
c_ulong(1L)
c_ulong(0L)
c_ulong(1L)

运行结果如下图所示:

Python引用计数操作示例

另外python编译成字节码的模块为 dis

import dis # bytecode disassembler module
def time_2(x):
  return 2 * x
dis.dis(time_2)
print "*"*20
dis.dis(get_ref)

结合上述代码,测试示例如下:

import ctypes
import dis # bytecode disassembler module
def get_ref(obj):
  """ returns a c_size_t, which is the refcount of obj """
  return ctypes.c_size_t.from_address(id(obj))
def time_2(x):
  return 2 * x
dis.dis(time_2)
print "*"*20
dis.dis(get_ref)

运行结果:

  7           0 LOAD_CONST               1 (2)
              3 LOAD_FAST                0 (x)
              6 BINARY_MULTIPLY    
              7 RETURN_VALUE       
********************
  5           0 LOAD_GLOBAL              0 (ctypes)
              3 LOAD_ATTR                1 (c_size_t)
              6 LOAD_ATTR                2 (from_address)
              9 LOAD_GLOBAL              3 (id)
             12 LOAD_FAST                0 (obj)
             15 CALL_FUNCTION            1
             18 CALL_FUNCTION            1
             21 RETURN_VALUE       

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python进行数据提取的方法总结
Aug 22 Python
Python操作SQLite数据库的方法详解
Jun 16 Python
python使用fcntl模块实现程序加锁功能示例
Jun 23 Python
python3使用SMTP发送简单文本邮件
Jun 19 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
python numpy元素的区间查找方法
Nov 14 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
Python如何使用turtle库绘制图形
Feb 26 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
Jul 03 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
python opencv实现图像配准与比较
Feb 09 Python
python实现括号匹配的思路详解
Aug 23 #Python
使用Python实现一个栈判断括号是否平衡
Aug 23 #Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 #Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 #Python
Django 限制用户访问频率的中间件的实现
Aug 23 #Python
浅谈Django的缓存机制
Aug 23 #Python
如何在python字符串中输入纯粹的{}
Aug 22 #Python
You might like
php xfocus防注入资料
2008/04/27 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
php自动载入类用法实例分析
2016/06/24 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
深入理解vue Render函数
2017/07/19 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
python实现K最近邻算法
2018/01/29 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
Python3中的bytes和str类型详解
2019/05/02 Python
python开启debug模式的方法
2019/06/27 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
Python操作Excel的学习笔记
2021/02/18 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
冰淇淋开店创业计划书
2014/02/01 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
春节慰问简报
2015/07/21 职场文书
升学宴家长致辞
2015/07/27 职场文书