码迷,mamicode.com
首页 > 编程语言 > 详细

python中的参数传递和返回值

时间:2015-06-07 20:16:59      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

python中的参数传递类似java,有着自己的内存回收机制,这和C++有着很大的差别。

1.函数的参数传递:

>>> a = [1, 2, 3]
>>> def fun(a):
        for i in a:
            print i
a.append(4)
>>> fun(a) 1 2 3 44807792 >>> a [1, 2, 3, 4]

从上面的结果可以看出,python的函数传递是引用传递,因此,在函数体内修改对象内容会导致函数外面的对象内容改变。

这个对于一些内置类型,如int,float是不成立的。

注意,如果在函数内对传进来的参数做del操作是不会对实际对象产生影响的,因为del删除的是该引用,而实际对象的引用数至少为1,所以不会被回收。

 

2.函数的返回:

>>> def fun():
        a = [1, 2, 3]
        print id(a)
        return a
>>> a = fun()
44806192
>>> id(a)
44806192
>>> def fun():
        a = 1
        print id(a)
        return a
>>> a = fun()
34243104
>>> id(a)
34243104

可以看出,函数返回的也是对象的引用,而对象此时的引用计数为1,所以不会被内存回收。

这在C++中是肯定错误的,但是python有自己的内存回收机制,因此是没问题的。

 

3.总结:

python和java类似,没有指向对象的指针,每个对象都是靠引用对其进行操作,因此在函数传递和函数返回时,通过对同一个对象的引用实现了对同一个对象的操作。当函数调用结束时,对象的内存不会消失,但是引用本身会被回收。

python中的参数传递和返回值

标签:

原文地址:http://www.cnblogs.com/chybot/p/4558956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!