d.p*_*tto 0 python reference list
我们在Python中知道这一点
a= [1, 2]
b= [a, a]
print b
[[1, 2], [1, 2]]
a.append(3)
print b
[[1, 2, 3], [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)
这是因为b有相同列表的引用a和附加的anthing a也在变化b.
我的问题是 - 这种行为的用途或优势是什么?
为什么Python通过引用分配列表值?
如果我做b =[a,a]得很开心,那就意味着我对价值感兴趣,而a不是a后来发生的事情.
我们可以做到这一点
b=[a[:], a[:]]
#or
b=[a,a]
a=[]
Run Code Online (Sandbox Code Playgroud)
但为什么这不是python中的默认行为?为什么Python是这样设计的!!
小智 5
在Python中,Everything是一个Object.记住这个规则,你不会在任何地方感到困惑.
在上面的例子中,我们可以这么说
b=[a,a]
Run Code Online (Sandbox Code Playgroud)
b的对象现在是一个列表
[object of a,object of a ]
Run Code Online (Sandbox Code Playgroud)
所以对a的任何修改都会在这里反映出来
证明这一点的一个有趣例子是我们都知道元组是不可变的,现在;
a=[1,2]
b=(0,a)
a.append(3)
print b # (0,[1,2,3])
Run Code Online (Sandbox Code Playgroud)
太棒了,这里的元组是如何被修改的.答案与上述相同..