2016-07-10 2 views
0

私は最近、Pythonを学んでいて、問題を抱えていました。ここに私のコードです。なぜ、両方のリストがpythonで1つだけappend()関数を呼び出した後に変更されるのですか?

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

出力は次のとおりです。

[1, 2, 3, 4, 5] 
[1, 2, 3, 4, 5] 
[1, 2, 3, 4, 5, 8] 
[1, 2, 3, 4, 5, 8] 

なぜは私だけBにそれを呼び出す場合でも、両方のリストを変更しますか?私たちがb = aを割り当てるとき、私たちはそのリストの別のコピーを作っていませんか?

+1

。それをコピーするには 'b = list(a)'を使います。 – slezica

+0

いいえ、私はコピーする手順を知りたくありません。私は上記のコードがどのように機能し、なぜ両方のリストが変更されるのか知りたいですか? – ashwani

+6

@user:同じリストに対して異なる名前を使用しています。あなたが私の犬Brutusに電話して私が彼をBristoと呼ぶなら、あなたはBrutusの尾を引くことができ、Bristoは痛みを感じるでしょう。彼らは同じ犬です。 – zondo

答えて

2

あなたは、配列のコピーがcopyを使用する場合のpython等の配列、オブジェクトのための参照を使用しているので:あなたは同じリストではなく、異なるリストに別の名前を使用している

import copy 
b = copy.copy(a) 
+0

これは分かります。しかし、これについての詳細な説明はどこにありますか? – ashwani

+2

バインドと名前について、そしてPython言語がそれらをどのように実装しているかについて説明しているhttps://docs.python.org/2/reference/simple_stmts.html#assignment-statementsをご覧ください。 – 2ps

関連する問題