2016-08-10 9 views
1

質問に答える時間を取ってくれてありがとう。なぜ出力が一致しないのかここでは混乱しています。単純なpythonリストの変更

動作1:

x = [[0, 0], [0, 0]] 
print(type(x)) # <class 'list'> 
print(x) # [[0, 0], [0, 0]] 

x[0][0] = 1 
print(x) # [[1, 0], [0, 0]] 

操作2:

y = [[0] * 2] * 2 
print(type(y)) # <class 'list'> 
print(y) # [[0, 0], [0, 0]] 

y[0][0] = 1 
print(y) # [[1, 0], [1, 0]] 

私の理解は、xとyの両方が同じでなければならないということでした。しかし、彼らはそうではないように見えます。私はここで何が欠けていますか?

y = [[0] * 2] * 2 

あなたは、単一のリスト[0][0, 0]を作成している:あなたが不足しているもの

答えて

6

は、あなたがこれを行うときということです。このリストXを呼び出します。次に[X, X]を作成します。ここで、両方のXは同じ基本となるリストを指しています。したがって、最初のリストを変更すると、2番目のリストも変更されます。

なぜ、最初のリストの最初の要素を変更しても、各リストの2番目の要素が変更されないのですか?さて、[0] * 2は本当に2つの数字のリストなので、0への参照は変更できません(あなたのプログラムの0が何か他のものを意味するならば恐怖を想像してください)。

+0

将来的には、質問を重複としてマークすることを検討してください。そのような重複は、1つのポスターが4分以内に提供する可能性があるよりはるかに優れた、より完全な回答を含むことが多いからです。 – TigerhawkT3

関連する問題