python中的参数传递

BEGIN:

前面在介绍python的六大数据类型的时候提到根据数据可变和不可变进行的数据类型分类:

Python3 的六个标准数据类型中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);

可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

python中的函数参数既支持按值调用,也支持按引用调用。这里需要再次强调:python中万物皆对象,python中的变量是对象的引用,变量中存储的是内存地址。当函数被调用时,解释器会查看传入的变量(内存地址)指的那个指的类型,如果是一个可变类型的值,就按照引用传递变量;如果是一个非可变类型的值,就考虑按照值传递变量。

对于不可变数据类型(数字、字符串、元组),函数对变量的任何修改都是函数私有的,不会反映到函数外面,由于这些变量是不可变的,所以不能修改,如:
在这里插入图片描述
对于可变数据类型(列表、字典、集合),传入函数中的变量,函数内部的修改都会反映到函数外面,即最初始的变量会受到影响,毕竟这些初始的变量是可变类型,如:
在这里插入图片描述
例外:
在这里插入图片描述
这里,对于可变数据类型,传入参数并没有改变函数外面的值,原因在于语句:a = a+[‘a’,‘b’,‘c’]

首先,传入的变量,先执行a+[‘a’,‘b’,‘c’],所产生的新的变量(新对象的引用),重新赋值给原先的变量a,覆盖其原先的引用,导致原先的变量a与外面初始变量之间的联系断了,这时候,a变量对应的对象引用已经和原先的对象引用不同了,那么函数里面的a 的改变就和原先的变量没有关系了,所以并不能影响到函数外面的变量。

也许这样看会明白一些:
在这里插入图片描述
函数里面的变量a+[‘a’,‘b’,‘c’]实际上是[1,2,3,‘a’,‘b’,‘c’]这个值,而a=a+[‘a’,‘b’,‘c’]等价于a=[1,2,3,‘a’,‘b’,‘c’],由于[1,2,3]对应的内存地址和[1,2,3,‘a’,‘b’,‘c’]对应的内存地址不是同一个,对于函数里面的变量a,内存会重新开辟一个空间作为变量a的内存地址,相当于一个新的变量,因此这里函数里面的a后续无论如何改变都不会影响到外面的那个变量a的值。

END.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值