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 encode和decode的妙用
Sep 02 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
python图片验证码生成代码
Jul 02 Python
python增加矩阵维度的实例讲解
Apr 04 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
Aug 09 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
python中time、datetime模块的使用
Dec 14 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
JS hashMap实例详解
2016/05/26 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
python中assert用法实例分析
2015/04/30 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
残疾人创业典型事迹
2014/02/01 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
英文自荐信范文
2015/03/25 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android
mysql数据库如何转移到oracle
2022/12/24 MySQL