Python Garbage Collection 与 Objective-C ARC

转载请注明出处 http://blog.csdn.net/u014205968/article/details/69389363

Python GC 与 Objective-C ARC

提起GC(Garbage Collector)我们首先想到的应该是JVMGC,但是作者水平有限,Java使用的不多,了解的也不够深入,所以本文的重点将放在对python gc的讲解,以及对比OC使用的ARC(Automatic Reference Counting)

本文需要读者有PythonOC的基础,如果遇到没有讲解清楚的地方,烦请自行查阅。

引用计数

因为PythonOC都使用了引用计数作为内存管理的一种手段,所以先介绍一下引用计数

引用计数是一种非常简单的追踪内存中对象的技术,可以这样想象,每一个对象都有一个内部的变量称为引用计数器,这个引用计数器记录了每个对象有多少个引用,我们称为引用计数。当一个对象创建或者被赋值给其他变量时就会增加引用计数,当对象不再被使用或手动释放时就会减少引用计数,当引用计数为0时也就表示没有变量指向该对象,程序也无法使用该对象,因此需要被回收。

在介绍Python的引用计数之前先普及一下常识,python中一切都是对象,对象赋值、函数参数传递都采用传引用而不是传值(也可以理解为传值,但是这个值不是对象的内容值而是对象的地址值),有些读者可能受到一些博客的影响会认为在传递数字类型或字符串类型时是传值而不是传址,看如下代码:

def swap(x, y):
    temp = x
    x = y
    y = temp

if __name__ == '__main__':
    a = 1
    b = 2
    swap(a, b)
    print(a, b)

    x = 'Jiaming Chen'
    y = 'Zhouhang Wan'
    swap(x, y)
    print(x, y)

    m = (1, 2)
    n = (3, 4)
    swap(m, n)
    print(m, n)

python2.7 output:
(1, 2)
('Jiaming Chen', 'Zhouhang Wan')
((1, 2), (3, 4))

python3.5 output:
1, 2
'Jiaming Chen' 'Zhouhang Wan'
(1, 2) (3, 4)

很多读者认为上述代码执行了swap函数以后并没有交换实参的值,因此认为python在对数字类型、字符串类型或元组类型这样的参数是采用传值的方式进行的,实际上这是错误的理解,要记住python中一切都是对象,所有的参数传递也都是传递引用即传址而不是传值,再看如下代码:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值