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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
Python写的英文字符大小写转换代码示例
Mar 06 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
tensorflow模型转ncnn的操作方式
May 25 Python
使用python创建Excel工作簿及工作表过程图解
May 27 Python
如何让python的运行速度得到提升
Jul 08 Python
python复合条件下的字典排序
Dec 18 Python
python spilt()分隔字符串的实现示例
May 21 Python
Python下opencv库的安装过程及问题汇总
Jun 11 Python
你需要掌握的20个Python常用技巧
Feb 28 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 显示客户端IP与服务器IP的代码
2010/10/12 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
破解Session cookie的方法
2006/07/28 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
python中的__slots__使用示例
2015/02/26 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
详解如何设置Python环境变量?
2019/05/13 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python中print函数简单使用总结
2019/08/05 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
nginx实现动静分离的方法示例
2021/11/07 Servers
SQL CASE 表达式的具体使用
2022/03/21 SQL Server