函数的参数传递机制
1、实参给形参传值,传的什么值?
数据值还是地址值?在python中一切皆对象,所以传的都是地址值,又称为引用。
a = 1 其实a变量中村的是1这个int对象的地址,也叫做a引用1这个int对象
2、参数接收的对象的类型分为2种情况:
(1)不可变类型:例如:整数int、浮点数float、布尔bool、字符串str、元组tuple、冻结集合frozenset等
(2)可变类型:例如:列表list、集合set、字典dict等
结论:
(1)不可变类型:形参接收完实参的地址后,形参无论怎么修改,都与实参无关。
除非返回修改后的值,并让实参变量重新接收。
(2)可变类型:
情况一:没有让形参变量指向新的对象,在形参对象内部做修改,与实参有关。相当于实参对象也跟着改变了。
情况二:形参变量指向了新对象,那么接下来形参的操作与实参就无关了,除非返回,并重新接收。
例如:内置函数 sorted(列表等):返回新的列表
列表的函数 列表.sort():在原列表内部排序
集合1.union(集合2):返回新的集合
集合1.update(集合2):直接修改集合1
3、如果参数接收的对象类型是可变类型,但是又不希望形参的修改影响实参,那么可以在传参的时候加一个 deepcopy
