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自动化开发学习之三级菜单制作
Jul 14 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
Python实现ping指定IP的示例
Jun 04 Python
Python基于百度云文字识别API
Dec 13 Python
python3 深浅copy对比详解
Aug 12 Python
python自动发微信监控报警
Sep 06 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
matlab灰度图像调整及imadjust函数的用法详解
Feb 27 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
python3.9.1环境安装的方法(图文)
Feb 02 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/05/04 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
Symfony的安装和配置方法
2016/03/17 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
JavaScript的面向对象(二)
2006/11/09 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python和C语言混合编程实例
2014/06/04 Python
python列表操作实例
2015/01/14 Python
使用C++扩展Python的功能详解
2018/01/12 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
《小小雨点》教学反思
2014/02/18 职场文书
创业女性典型材料
2014/05/02 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
单身证明格式样本
2015/06/15 职场文书
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android