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三元运算符实现方法
Dec 17 Python
python切换hosts文件代码示例
Dec 31 Python
python抓取网页图片示例(python爬虫)
Apr 27 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
用python实现百度翻译的示例代码
Mar 09 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
Python 批量读取文件中指定字符的实现
Mar 06 Python
Flask缓存静态文件的具体方法
Aug 02 Python
matplotlib grid()设置网格线外观的实现
Feb 22 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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结束标签的使用细节探讨及联想
2013/03/04 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
建筑设计学生的自我评价
2014/01/16 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
小学教师寄语大全
2014/04/03 职场文书
社团活动总结范文
2014/04/26 职场文书
工程造价专业求职信
2014/07/17 职场文书
建筑安全生产责任书
2014/07/22 职场文书
机电一体化专业求职信
2014/07/22 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
刑事辩护词范文
2015/05/21 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
投诉信格式范文
2015/07/02 职场文书
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server