python中对一个函数可以传递参数,但是如何分辨是值传递还是引用传递,不是程序员手动控制的,而是python根据你传入的数据对象,自动识别的。
如果你传入的参数对象是可变对象:列表,字典,这个时候就是引用传递,如果参数在函数体内被修改,那么源对象也会被修改。
如果你传入的参数对象是不可变的对象:数字,元组,字符串,这个时候就是值传递。那么源对象是不会改变的,
例子一:
import sys
a=2
b=[1,2,3]
def change(x,y):
x=3
y[0]=4
change(a,b)
print a,b
输出结果: 2 [4, 2, 3];可以看出数字作为一个不可变对象,a的值没有变化,而b作为列表对象,是可变对象,所以b被改变了
例子二:
import sys
a="11111"
b={"a":1,"b":2,"c":3}
def change(x,y):
x="222"
y["a"]=4
change(a,b)
print a,b
输出结果:11111 {'a': 4, 'c': 3, 'b': 2},a作为字符串是不可变对象,所以没变化,b作为字典,是可变对象,所以被改变了
例子三:
import sys
a=(1,2,3)
b={"a":1,"b":2,"c":3}
def change(x,y):
x="222"
y["a"]=4
change(a,b)
print a,b
输出的结果:(1, 2, 3) {'a': 4, 'c': 3, 'b': 2}