Python中值传递和引用传递区别

【Python中值传递和引用传递区别】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}

    推荐阅读