python中的参数传递和java等其他语言实现有点区别,python中对象有两种,不可变对象(基本类型,int,string,布尔等),对于这一部分的对象作为参数传递时,是值传递,在函数里面值修改了,外面不影响;另外一种可变对象(字典,列表,集合),对于这样的对象作为参数传递时,是引用传递,在内部函数修改了值,外面的值也会变化。
1、值传递,如:
def add(a):
a = 2
a = 1
print(a)
add(a)
print(a)
这里两个a打印的值都会是1
2、引用传递,如:
def change_dict(args)
args['b'] = "myname"
mydict = {
"a": 2,
"b": "name"
}
print(mydict)
change_dict(mydict)
print(mydict)
这里的第一个打印和第二个打印就会不一样。
但是,往往会出现一种情况,就是我们不希望里面函数对对象操作了什么导致函数外部页跟着变,因为我们不清楚函数内部会做什么修改,因此,我暂时找了一个傻瓜方法,
在调用前先深拷贝一份数据(深拷贝,会完全复制一份一样的数据,浅拷贝,只是复制了地址),python的copy模块提供了一个方法深拷贝用法如下:
import copy
copydict = copy.deepcopy(mydict)
以上就是我对python参数传递的理解,希望大家指导