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操作MySQL数据库具体方法
Oct 28 Python
Python库urllib与urllib2主要区别分析
Jul 13 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 Python
Python实现批量自动整理文件
Mar 16 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实现时间轴函数代码
2011/10/08 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
js格式化时间小结
2014/11/03 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
跟老齐学Python之print详解
2014/09/28 Python
python实现的希尔排序算法实例
2015/07/01 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
Numpy之文件存取的示例代码
2018/08/03 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Python多线程获取返回值代码实例
2020/02/17 Python
Python post请求实现代码实例
2020/02/28 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
法律专业学生的自我评价
2014/02/07 职场文书
《长城》教学反思
2014/02/14 职场文书
老公保证书怎么写
2015/02/26 职场文书
优秀大学生自荐信
2015/03/26 职场文书
教师节简报
2015/07/20 职场文书