0

We know this in Python

a= [1, 2]
b= [a, a]
print b
[[1, 2], [1, 2]]
a.append(3)
print b
[[1, 2, 3], [1, 2, 3]]

This is because b have reference of same list a and appending anthing in a also changes b.
My question is -- What is the use or advantage of this behavior?
Why Python assign list values by reference??
If I am doing b =[a,a] obusely it means I am interested in values of a not in what happens to a later on.
We can achieve this as

b=[a[:], a[:]] 
#or
b=[a,a]
a=[]

but Why this is not the default behavior in python? Why Python is designed like this!!

4

4 に答える 4

5

Pythonでは、すべてがオブジェクトです。このルールを覚えておいてください。どこでも混乱することはありません。

上記の例では、次のように言うことができます

b=[a,a] 

bのオブジェクトがリストになりました

[object of a,object of a ]

したがって、aへの変更はここに反映されます。

これを証明する興味深い例の1つは、タプルが不変であることを私たち全員が知っていることです。

a=[1,2]

b=(0,a)


a.append(3)

print b # (0,[1,2,3])

驚くべきことに、ここでタプルはどのように変更されましたか。答えは上記と同じです。

于 2012-09-27T10:23:23.423 に答える
1

私が b =[a,a] をやっている場合、それは後で a に何が起こるかではなく、a の値に興味があることを意味します。

なぜそれが明らかなのか、私にはまったくわかりません。リストは、物事を保持する単なる方法です。私は物事の値に興味があるかもしれませんが、物事自体にも興味がある可能性があります - たとえば、それらを変更する関数にそれらを渡したいのです。

于 2012-09-27T10:50:17.187 に答える
0

Pythonはすべてを参照によって割り当てます。演算子は、左側の=名前を右側のオブジェクトにバインドするだけです。これは、可変オブジェクトが右側で使用され、のようなインスタンスメソッドを呼び出すことによって変更された場合にのみ、ほとんどの人に明らかになります.append()

于 2012-09-27T10:19:35.960 に答える
0

基本的に、それは言語設計の選択です。Pythonのセマンティクスを単純化して、Pythonには変数ではなく名前があると言います。このように、のセマンティクス=は非常に単純です。LHSは、RHSを参照するための単なる新しい名前です。

于 2012-09-27T10:21:16.167 に答える