python中函数参数传递,传值,传指针,可变对象和不可变对象的说明

/ 0评 / 0

可变对象:
对象的内容是可变的,例如list,set,dict,可以理解为C++中的指针传递
不可变对象:
对象的内容是不可变的,例如int,float,string,tuple等,可以理解为C++中的值传递

python中变量是没有类型的,可以看做是C中的void*类型的指针,变量是可以指向任何对象的,对象才是有类型的。

python中函数参数的传递是传递的变量的值,就是变量所指向的对象的地址。
无论对于可变对象还是不可变对象,传递的都是所指向的对象的地址。
对于可变对象的传参,函数内改变的是对象的内容,即类似于C++中的指针传递,函数内部改变可变对象的值,函数外部的对象的值也会相应改变。
对于不可变对象的传参,函数内部改变的是对象的指针的指向,形参指向了新的对象的地址,函数外部的对象的值并没有改变。

特殊说明:
对于*args,参数传递过程中封装成了tuple,是不可变对象。
对于**kwargs,参数传递过程中封装成了dict,函数内部赋值了一份dict,所以即使传递的是可变对象,函数内部改变也不会影响函数外部参数的值。
总结自文章:
https://blog.csdn.net/theonegis/article/details/51013079
https://www.runoob.com/note/46684