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类参数self使用示例
Feb 17 Python
Python中如何获取类属性的列表
Dec 26 Python
详解python里使用正则表达式的分组命名方式
Oct 24 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
pip安装时ReadTimeoutError的解决方法
Jun 12 Python
python批量下载抖音视频
Jun 17 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
解析PyCharm Python运行权限问题
Jan 08 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
Python调用飞书发送消息的示例
Nov 10 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处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
js密码强度校验
2015/11/10 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
python统计文本文件内单词数量的方法
2015/05/30 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
python批量获取html内body内容的实例
2019/01/02 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
AJax面试题
2014/11/25 面试题
播音主持专业个人自我评价
2014/01/09 职场文书
党小组意见范文
2015/06/08 职场文书
《日月潭》教学反思
2016/02/20 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL