为什么python通过引用分配列表值

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)

太棒了,这里的元组是如何被修改的.答案与上述相同..

  • 怎么知道的?完全有可能在追加到'a`时你会想要它来编辑`b`.Python通过使用`b =(0,a)`或`b =(0,a [:])`提供了灵活性.仅仅因为它不是你熟悉的并不意味着它不是一种有效的做事方式. (2认同)