コードの一部をデバッグするときに、この問題が発生しました。以前にこの動作を認識していなかった場合。
foo = bar = [1, 2, 3]
hex(id(foo))
Out[121]: '0x1f315dafe48'
hex(id(bar))
Out[122]: '0x1f315dafe48'
両方の「変数」が同じメモリ位置を指しています。ただし、一方が変更されると、もう一方も変更されます。
foo.append(4)
bar
Out[126]: [1, 2, 3, 4]
したがって、基本的にここでは、同じ変数/メモリ アドレスに 2 つの名前が割り当てられています。これは次のものとは異なります。
foo = [1, 2, 3]
bar = [1, 2 ,3]
hex(id(foo))
Out[129]: '0x1f315198448'
hex(id(bar))
Out[130]: '0x1f319567dc8'
foo
ここで、 or のどちらかを変更してもbar
、もう一方には影響しません。
だから私の質問は: なぜこの機能 (変更可能な型の連鎖代入) が Python にさえ存在するのですか? 自分の足を撃つためのツールを提供する以外に、何か目的がありますか?