1

コードの一部をデバッグするときに、この問題が発生しました。以前にこの動作を認識していなかった場合。

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 にさえ存在するのですか? 自分の足を撃つためのツールを提供する以外に、何か目的がありますか?

4

1 に答える 1