关于python中可变类型做函数参数的一些疑问。。。

今天下午在做笔记,然后遇到个问题,想来请教下各位神仙
python中可变类型做形参,传递的是引用;而不可变类型做形参,传递的是实际的值
之前我一直理解为不可变类型作为形参类似于c++中的值传递,而可变类型做形参相当于是c++中的引用传递
然后我就写了下面的代码:
输出结果为:
[10]
[10, 20, 30]
实际调试的时候我发现函数中的mylist并没有进行更新,函数体中又创建了一个新的变量名mylist,使用id()查看,发现和之前的是不同的
然后我就去试了一下c++的引用传递,查看内存地址,发现是同一个的

我知道python中变量名相当于是对象的一个引用,那作为形参时,它如果传递引用的话,为啥它重新创建了一个对象呢?
这里想问一下,
是不是可变类型作为函数的形参,传递的是具体的对象?
还是说python中函数的形参是不能做左值被赋值的?


辛苦各位神仙解释下。。



#Python#
全部评论
函数中传递的是对象的引用,当形参指向了不同对象,实参不会改变;当形参通过传递来的引用修改了对象的内容,实参会跟着改变,因为形参和实参指向的是同一个对象。
点赞 回复 分享
发布于 2019-05-20 22:12
mylist[0] = 1 这样的话又变成了引用传递了,,所以也不是不能做左值,,,已经懵逼,求解答
点赞 回复 分享
发布于 2019-05-20 19:58
mylist = [10]的意思是创建了一个新对象[10],然后用mylist指向它?
点赞 回复 分享
发布于 2019-05-20 22:37
传递的是引用的副本,当传递的引用指向不改变时,原先的变量会跟着变,因为指向同一个对象。但是如果在函数中改变了变量的指向,这时原变量和传入函数的引用不再指向同一个对象,所以原先的变量不会跟着变。
点赞 回复 分享
发布于 2019-05-20 22:54

相关推荐

不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务