首页 > 编程语言 > 详细

python中的参数传递

时间:2020-11-12 13:29:01      阅读:19      评论:0      收藏:0      [点我收藏+]

BEGIN:

此前,我一直以为python的参数传递只是值传递,直到面试的时候被问到这个问题,才发现,我一直坚守的“你以为就只是你以为”这个真理真的是一个真理,闲话不多说,进入正题。前面在介绍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 的改变就和原先的变量没有关系了,所以并不能影响到函数外面的变量

 

END.

python中的参数传递

原文:https://www.cnblogs.com/gangpei/p/13963123.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!