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 相关文章推荐
wxpython 最小化到托盘与欢迎图片的实现方法
Jun 09 Python
Python获取Windows或Linux主机名称通用函数分享
Nov 22 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
tensorflow 获取变量&打印权值的实例讲解
Jun 14 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
Python常见内置高效率函数用法示例
Jul 31 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
Django项目后台不挂断运行的方法
Aug 31 Python
Python代码块及缓存机制原理详解
Dec 13 Python
python numpy数组复制使用实例解析
Jan 10 Python
matplotlib自定义鼠标光标坐标格式的实现
Jan 08 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
php4的session功能评述(三)
2006/10/09 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
php的socket编程详解
2016/11/20 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
教你如何用node连接redis的示例代码
2018/07/12 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python callable()函数用法实例分析
2018/03/17 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
铲车司机岗位职责
2014/03/15 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
工作自我评价范文
2015/03/05 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript