本文主要是介绍关于python中值传递和引用传递的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
主要参见于下面两个博客:
http://blog.csdn.net/dream_angel_z/article/details/51496044
http://www.cnblogs.com/buptldf/articles/4976561.html
自己这里再做下总结:
python的传递方式可以认为“传对象引用”,是传值和传引用的一种综合。针对于不可变对象(变量,tuple,str)是值传递,对于可变对象(list,dict)是引用传递。
EXP 1:
a=5
b=a
b=2
print a,b
输出为5,2 当前是值传递,改变b相当于创建了新的int对象,不会影响a
EXP 2:
a=[1,2,3]
b=a
b.append(5)
print a,b
输出都是[1,2,3,5] 这里是引用传递,改变b同时会改变a
EXP 3:
a=[1,2,3]
b=a
b=[4,5,6]
print a,b
输出[1,2,3] 和[4,5,6] 原本是引用传递,但是b=[4,5,6]相当于创建了新的对象,a和b就没有关系了
接下来谈到copy和deepcopy,都是为了单纯赋值,而不影响原值,但情况有所不一样:
a=[1,2,3,[4,5]]
b=copy.copy(a)
c=copy.deepcopy(a)
b.append(6)
b[3].append(7)
c.append(8)
c[3].append(9)
print a,b,c
输出分别为:
a: [1,2,3,[4,5,7]]
b: [1,2,3,[4,5,7],6]
c: [1,2,3,[4,5,9],8]
这里b只是浅层值复制,所以改变list里的list元素值还是会影响a
而c是深层值复制,改变c完全不影响a,改变a也不会影响c
这篇关于关于python中值传递和引用传递的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!