私はこの問題に頭を悩ませてきました。リストを作成して 4 つのコピーを作成します。そのうちの 1 つだけが同じメモリ インデックスを共有します。元のリストを変更すると、それらのコピーのうち 3 つも何らかの形で変更され、そのうちの 2 つのメモリ インデックスは異なります。オリジナルと同じコマンドを使用してリストを作成する場合にのみ、オリジナルへの変更の影響を受けないリストを作成できます。これはどのように可能ですか?コンソールからの出力は次のとおりです。
>>> orig=[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 123, 0]]
>>> id(orig)
151498220
>>> copy1=orig #same index
>>> id(copy1)
151498220
>>> copy2=orig[:] #different index
>>> id(copy2)
151498348
>>> copy3=list(orig) #different index
>>> id(copy3)
151503020
>>> copy4=[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 123, 0]]
>>> id(copy4)
151498636
>>> orig[0][1]=34
>>> copy1
[[0, 34, 0, 0], [0, 0, 0, 0], [0, 0, 123, 0]] #expected, same memory index
>>> copy2
[[0, 34, 0, 0], [0, 0, 0, 0], [0, 0, 123, 0]] #WTF?!?!?
>>> copy3
[[0, 34, 0, 0], [0, 0, 0, 0], [0, 0, 123, 0]] #ARGH!!!
>>> copy4
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 123, 0]] #workaround?
>>> id(orig)
151498220
>>> id(copy1)
151498220
>>> id(copy2)
151498348
>>> id(copy3)
151503020
>>> id(copy4)
151498636
メモリ インデックスは変更されませんでしたが、リストは変更されました。メモリ インデックスが orig と同じであるため、copy1 のみが変更されているはずです。