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 04 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
Python实现最大子序和的方法示例
Jul 05 Python
Python 进程之间共享数据(全局变量)的方法
Jul 16 Python
django将数组传递给前台模板的方法
Aug 06 Python
python实现按首字母分类查找功能
Oct 31 Python
python实现超市商品销售管理系统
Nov 22 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 Python
如何清空python的变量
Jul 05 Python
OpenCV图片漫画效果的实现示例
Aug 18 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脚本
2006/11/26 PHP
php下过滤HTML代码的函数
2007/12/10 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
解读! Python在人工智能中的作用
2017/11/14 Python
git进行版本控制心得详谈
2017/12/10 Python
python 判断网络连通的实现方法
2018/04/22 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
Python list运算操作代码实例解析
2020/01/20 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
Python urllib2运行过程原理解析
2020/06/04 Python
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
c语言常见笔试题总结
2016/09/05 面试题
机修工岗位职责
2013/11/24 职场文书
承办会议欢迎词
2014/01/17 职场文书
世博会口号
2014/06/20 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
机器人瓦力观后感
2015/06/12 职场文书
anaconda python3.8安装后降级
2021/06/11 Python
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技