您的位置:首页 > 编程语言 > Python开发

python中的参数传递和返回值

2015-06-07 19:38 651 查看
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类似,没有指向对象的指针,每个对象都是靠引用对其进行操作,因此在函数传递和函数返回时,通过对同一个对象的引用实现了对同一个对象的操作。当函数调用结束时,对象的内存不会消失,但是引用本身会被回收。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: