python中将类传给函数,在函数中修改类的值的问题

来源:互联网 发布:linux查看samba服务 编辑:程序博客网 时间:2024/06/05 20:04
作者:openkai
链接:https://www.zhihu.com/question/32003140/answer/54293695
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

说得具体点可以把python的变量理解成一个名字指向实际的值,在传到函数里的时候, 是告诉函数的变量名字也指向我的这个值,但是并不是我自己传到函数内
比如foo = [1,2,3] 可以理解成为foo指向[1,2,3],foo和[1,2,3]并不是在一起
现在有个函数
def alter(bar):    bar.append(4)    bar = [0,1]

如果我们把foo传给alter这个函数,
alter(foo)
就会有foo和bar分别指向[1,2,3]
执行bar.append(4)
因为bar指向[1,2,3], [1,2,3]现在变成[1,2,3,4]
因为foo也指向[1,2,3],现在被bar改成了[1,2,3,4],foo也是[1,2,3,4]
执行bar = [0,1]
bar指向一个新的[0,1],但是foo还是指向[1,2,3,4]
运行完alter函数foo是[1,2,3,4]
所以理论上不是传引用,如果穿引用foo在执行完alter函数后应该是[0,1]

下面是完整测试代码
def alter(bar):     bar.append(4)    bar = [0,1]foo = [1,2,3]print 'foo', fooalter(foo)print 'foo', foo
0 0