BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #3643同步于 2014/10/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

[问题]为什说python函数的参数传递时引用传递呀?不理解,有例

HB0318
2014/10/12镜像同步30 回复
a=[1,2,3] def change(a): b=[3,2,1] a=b return a print change(a) print a 得到的结果是 [3, 2, 1] [1, 2, 3] 前后a没有变呀,说明传递的不是引用呀。 但是 a = [1,2,3] def change_list(a): a[0] = a[0] + 1 return a print change_list(a) print a 输出又为[2,2,3] 又改变了。好像又是引用传递。 混乱了,日。 求大神给普及一下。 是不是叫副本传递更好,传递的是一个副本,副本改变属性的话会改变原来对象的属性(因为副本和原来对象指向的同一块内存),但是副本指向另外的对象,则原来对象不改变。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
longxia520机器人#1 · 2014/10/12
http://blog.csdn.net/winterttr/article/details/2590741
wangxiaobupt机器人#2 · 2014/10/12
2个a 不是同一个a 【 在 HB0318 (【唯暖神马首是瞻】暖羊羊关门小弟子) 的大作中提到: 】 : a=[1,2,3] : def change(a): : b=[3,2,1] : ...................
HB0318机器人#3 · 2014/10/12
看过这个,感觉他举得例子是改变了(a是一个list)a中的某个元素类似于只改变了a的属性,而不是改变了a呀。我举得第一个例子是改变了整个a。 【 在 longxia520 的大作中提到: 】 : http://blog.csdn.net/winterttr/article/details/2590741
HB0318机器人#4 · 2014/10/12
为啥不是一个a。a是作为一个参数传入函数的。 【 在 wangxiaobupt 的大作中提到: 】 : 2个a 不是同一个a :
HB0318机器人#5 · 2014/10/12
呼叫师傅。@nuanyangyang
wangxiaobupt机器人#6 · 2014/10/12
传进去的是a的引用 不是a。 python里面变量是没有类型的 发自「贵邮」
wangxiaobupt机器人#7 · 2014/10/12
等暖神来给你画图吧,爪机无力 发自「贵邮」
HB0318机器人#8 · 2014/10/12
aoao.确切的说是传进去的是 a引用所赋予的值(也即是内存的首地址)??可是java也一样呀,为啥java就叫值传递呀。 【 在 wangxiaobupt 的大作中提到: 】 : 传进去的是a的引用 不是a。 : python里面变量是没有类型的 : 发自「贵邮」
wangxiaobupt机器人#9 · 2014/10/12
给你出道题你就明白了,写一个java函数,参数是2个int类型指针,函数中让这两个指针分别指向对方。比如a指0,b指1。执行完后a指1,b指0。 发自「贵邮」