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实现CET查分的方法
Mar 10 Python
python使用paramiko实现远程拷贝文件的方法
Apr 18 Python
python win32 简单操作方法
May 25 Python
浅析python实现scrapy定时执行爬虫
Mar 04 Python
python表格存取的方法
Mar 07 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
jupyter notebook 多行输出实例
Apr 09 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
教你怎么用Python监控愉客行车程
Apr 29 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截取字符串函数分享
2015/02/02 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python实现的双色球生成功能示例
2017/12/18 Python
Python socket实现简单聊天室
2018/04/01 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
动物科学专业毕业生的自我评价
2013/11/29 职场文书
招商业务员岗位职责
2013/12/16 职场文书
企业消防安全制度
2014/02/02 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL