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 用户登录验证的小例子
Mar 06 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
在Python的Django框架中编写编译函数
Jul 20 Python
详解字典树Trie结构及其Python代码实现
Jun 03 Python
Python三级目录展示的实现方法
Sep 28 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Django中的Signal代码详解
Feb 05 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 Python
python Xpath语法的使用
Nov 26 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调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
微信支付开发维权通知实例
2016/07/12 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
python实现在pandas.DataFrame添加一行
2018/04/04 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
学期自我鉴定
2013/11/04 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
物理系毕业生自荐书范文
2014/02/22 职场文书
服装店营销方案
2014/03/10 职场文书
工程材料采购方案
2014/05/18 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
创业计划书之家教中心
2019/09/25 职场文书
Python正则表达式中flags参数的实例详解
2022/04/01 Python
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技