可能な重複を作成:
Python 2D list has weird behavor when trying to modify a single valuePythonのリスト内包表記:2次元配列
人々、
2次の文が同じである場合、私は疑問に思って?
a = [[0]*3]*3
b = [[0]*3 for i in range(3)]
結果は同じです。しかし、ある方法は他より良いでしょうか?ここでの違いは何ですか?
ご協力いただきありがとうございます。
nos
可能な重複を作成:
Python 2D list has weird behavor when trying to modify a single valuePythonのリスト内包表記:2次元配列
人々、
2次の文が同じである場合、私は疑問に思って?
a = [[0]*3]*3
b = [[0]*3 for i in range(3)]
結果は同じです。しかし、ある方法は他より良いでしょうか?ここでの違いは何ですか?
ご協力いただきありがとうございます。
nos
彼らは最初
>>> a[1][2] = 5
>>> a
>>> [[0, 0, 5], [0, 0, 5], [0, 0, 5]]
>>> b[1][2] = 5
>>> b
>>> [[0, 0, 0], [0, 0, 5], [0, 0, 0]]
同じじゃありません単一の内部配列へのポインタの外部配列を作成し、第2の配列は実際には3つの別々の配列を作成します。
いいえ、そうではありません。
あなたは3つの同一のリスト、同じ参照(のリスト)を持っている最初のものでは、第二に、あなたは、3つの異なるリストを持つ
>>> a = [[0]*3]*3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[0][0]=1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
>>> b = [[0]*3 for i in range(3)]
>>> b
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> b[0][0] = 1
>>> b
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
+1。 'a [0] .append(" foo ")'を試してください。 –
hereは、Pythonのドキュメントで説明したように、それは、深いコピー対浅いコピーの古典的なケースだ:)
この正確なトピックをカバーする数千人の質問は、文字通りあります... – JBernardo