返回信息流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]
又改变了。好像又是引用传递。
混乱了,日。
求大神给普及一下。
是不是叫副本传递更好,传递的是一个副本,副本改变属性的话会改变原来对象的属性(因为副本和原来对象指向的同一块内存),但是副本指向另外的对象,则原来对象不改变。
这是一条镜像帖。来源:北邮人论坛 / python / #3643同步于 2014/10/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
[问题]为什说python函数的参数传递时引用传递呀?不理解,有例
HB0318
2014/10/12镜像同步30 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
2个a 不是同一个a
【 在 HB0318 (【唯暖神马首是瞻】暖羊羊关门小弟子) 的大作中提到: 】
: a=[1,2,3]
: def change(a):
: b=[3,2,1]
: ...................
看过这个,感觉他举得例子是改变了(a是一个list)a中的某个元素类似于只改变了a的属性,而不是改变了a呀。我举得第一个例子是改变了整个a。
【 在 longxia520 的大作中提到: 】
: http://blog.csdn.net/winterttr/article/details/2590741
aoao.确切的说是传进去的是 a引用所赋予的值(也即是内存的首地址)??可是java也一样呀,为啥java就叫值传递呀。
【 在 wangxiaobupt 的大作中提到: 】
: 传进去的是a的引用 不是a。
: python里面变量是没有类型的
: 发自「贵邮」
给你出道题你就明白了,写一个java函数,参数是2个int类型指针,函数中让这两个指针分别指向对方。比如a指0,b指1。执行完后a指1,b指0。
发自「贵邮」