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 08 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
python匿名函数用法实例分析
Aug 03 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
浅谈pycharm使用及设置方法
Sep 09 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
python 实现学生信息管理系统的示例
Nov 28 Python
浅析Python中的随机采样和概率分布
Dec 06 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
什么是MVC,好东西啊
2007/05/03 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
JS 控制CSS样式表
2009/08/20 Javascript
javascript中如何处理引号编码"
2013/08/15 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
javascript模块化简单解析
2016/04/07 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
Python编码时应该注意的几个情况
2013/03/04 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
django使用graphql的实例
2020/09/02 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
python爬取微博评论的实例讲解
2021/01/15 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
英国医生在线预约:Top Doctors
2019/10/30 全球购物
精彩广告词大全
2014/03/19 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
项目验收申请报告
2015/05/15 职场文书
教师师德承诺书2016
2016/03/25 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书