タプルは変更されませんでしたが、指定したリストと同じ重複参照が含まれています。
タプルではなく(より正確には、タプル内のリストへの参照ではなく)リスト(L1
)を変更しました。
たとえば、あなたはすることができなかっただろう
L2[1] = 5
タプルは正しく述べると不変だからです。
そのため、タプルは変更されませんでしたが、タプルに参照が含まれているリストが変更されました(両方のエントリが同じリストへの参照であったため、出力の両方の値がに変更されました5
)。タプルの値は変更されていません。
この文脈で参照を「ポインタ」と考えると役立つ場合があります。
編集(以下のコメントのOPによる質問に基づく):
参考文献、リスト、コピーについては、これらの例が役立つかもしれません。
L=range(5)
s = (L, L[:]) # a reference to the original list and a copy
s
([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])
次にL[2]を変更します
L[2] = 'a'
与える:
s
([0, 1, 'a', 3, 4], [0, 1, 2, 3, 4]) # copy is not changed
「2番目」のリストにはコピーが含まれているため、変更されていないことに注意してください。
今、
L=range(5)
リストの2つのコピーを作成し、タプルへの参照を提供しています
s = (L[:], L[:])
now
L[2] = 'a'
元のリストL以外には影響しません
s
([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])
これがお役に立てば幸いです。