Python的参数传递概述
根据Python的官方文档,Python中的参数传递机制是所谓的pass by assignment。理解这个pass by assignment需要从两个层次去考虑:
1. 被传递的参数实际上是对象的引用(但这个引用是以值的形式传递的)。
2. 有的对象是可变类型,有的对象是不可变类型。
那么:
- 如果我们向一个方法中传递一个可变类型,该方法得到的是这个可变类型的对象的引用。我们可以在该方法中修改这个对象的内容。但是如果改变该变量所对应的引用,比如将一个新的对象赋值给该变量,在该方法之外就无法得知这种改变了。在该方法结束返回之后,方法之外的原变量所对应的仍然是原来的对象。
- 如果我们向方法中传递了一个不可变类型,我们仍然可以重新给该变量赋值,但是方法结束之后,方法外的原变量不会有任何变化。
下面的例子清楚地说明了上面几种情况。
传递可变类型 —— 以list为例
在方法中改变参数内容
def pass_mutable_object(input_list):
print('input list is ', input_list)
input_list.append(4)
print('changed input list to ', input_list)
input_list = [1, 2, 3]
print('before the function', input_list)
pass_mutable_object(input_list)
print('after the function', input_list)
上述代码的执行结果为:
before the function [1, 2, 3]
input list is [1, 2, 3]
changed input list to [1,