快捷搜索: 王者荣耀 脱发

python 函数参数作为引用时

作为参数传入函数中,运行结束后,实参到底会不会影响

强烈推荐实践网址:

1. 各种类型数据,参数名到底对应什么?

如果你学过c或者c++, 你应该知道引用这个东西,我简单的理解为,如果这个参数名上的地址,存的不是它的值,而是它对应值得位置,那就是引用。从上图不难发现,python常用数据类型,其中参数是引用的为,类实例,复数,列表,集合,元组,字典,它们的参数名,实际上对应的都是引用。

2. 函数内对参数进行改变,会影响实参么?

函数栈里头会存放函数运行过程中的相关信息,运行函数f的时候,f函数有自己形参a,a的值就是实参a的值,也就是3,对a进行+1操作,也就是对形参进行加一操作,不影响实参,自然,函数运行后,也不会改变函数外a的值的

同上,运行函数f的时候,f函数自己形参a值就是实参a的值,也就是对列表空间的引用,此时,对形参操作,就相当于对实参操作,但是改变了形参就是改变了实参。

3. 最终结论

根据上面的演示,是不是是说,只要参数存的就是变量的值,在函数中对参数进行操作,函数结束,参数也不会变化,相反,如果参数存的是变量的引用,在函数中对参数进行操作,就是对原参数的操作,函数结束,原参数也随之变化了。

!!!!通体是对的,但是有两个特例!!!!!

一个是元组,一个是复数。

你瞅瞅! 对元组和复数进行变更,他并不是在原地址上进行操作,而是新创建了一个元素,然后赋值给变量名。这个过程就像vector扩充,新建一片空间,把旧的都复制过去,然后把新地址给变量。上图!

元组,在函数内进行扩充的时候,f函数形参a将指向一片新的地方。

复数,在函数内进行操作变化的时候,f函数形参a将指向一片新的地方。

4.所以

集合(set),列表(list),字典(dict),类示例,作为参数传入函数中,在函数中进行值的操作,会对实参有改变,其他数据类型,不会有改变!!

经验分享 程序员 微信小程序 职场和发展