举例,函数参数如果是dic,都不需要返回值,原值就被改变了
def aa(dic):
dic["aa"]=2
dic["bb"] = 2
dic={}
dic["aa"]=1
aa(dic)
print(dic)
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
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