举例,函数参数如果是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