2017-02-17 13 views
0

私は、Pythonで初心者だし、これを発生し、なぜ私は本当に理解していない:リストがPythonで値を変更するのはなぜですか?

vector1 = [1,0,0,1] 
left = vector1 
print(str(left)) 

right = vector1 
right[0] = 2 

print(str(left)) 
print(str(right)) 

出力は次のとおりです。

[1, 0, 0, 1] 
[2, 0, 0, 1] 
[2, 0, 0, 1] 

私が本当にしたいことは次のとおりです。

[1, 0, 0, 1] 
[1, 0, 0, 1] 
[2, 0, 0, 1] 

なぜ 'left'ベクトルが最初の 'vector1'の値で修正されたのですか?

私は、これは初心者の質問であることを確信しているが、私はMATLABでコードを使用していると私は混乱しています...事前に

ありがとう!あなたは

left = vector1 

を言うとき

+0

'left'と' right'はコピーではありません。 –

+0

'left = vector1'の後に、同じリストを参照する2つの変数があります。 2つのリストが必要な場合は、リストをコピーする必要があります。例えば。 'left = list(vector1)'、 'right = list(vector1)'です。 – khelwood

+0

この[リンク](http://www.pythontutor.com/visualize.html#code=vector1%20%3D%20%5B1,0,0,1%5D%0Aleft%)でコードの実行を確認してください20%20%20%3D%20%1%0%28%29%29%0%0%20%3D%20%1%5B%3A%5D%0%5B0%5D%20%3D%202%0A%0A% 28%、28%、28%、28%、28%、28%、28%、28%、28%、28%、28%、28%、28%、28%、29%、29%次に、コードを編集して変更を検査します。 @Darthが示唆するように 'left = vector1 [:]'を使用してください。 – SSSINISTER

答えて

1

Pythonは、リストの内容をコピーしませんが、新しいリストが左に、新しいリストを変更するときに、古いリストも変更され

をベクトル1を指します。

+0

リストの内容を新しい変数にコピーするにはどうしたらいいですか? –

+0

'left = vector1 [:]'は、@VíctorMartínezの –

+0

を行います:複製を参照してください。 –

関連する問題