python 函数参数作为引用时

1 篇文章 0 订阅
1 篇文章 0 订阅

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

强烈推荐实践网址: http://www.pythontutor.com/visualize.html#mode=display

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),类示例,作为参数传入函数中,在函数中进行值的操作,会对实参有改变,其他数据类型,不会有改变!!

 

欢迎大家指正

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值