次の Python 3 コードを検討してください。
a = [-1,-1,-1]
i = 0
次に、a と i の両方に対する同時代入の次の 2 つのバージョンを考えます。
課題バージョン 1:
a[i],i = i,i+1
課題バージョン 2:
i,a[i] = i+1,i
これら 2 つのバージョンの同時代入は、意味的に同等であると予想されます。ただし、同時割り当てのそれぞれの後に a と i の値を確認すると、異なる状態が得られます。
print(a,i)
割り当てバージョン 1 後の出力:
[0, -1, -1] 1
print(a,i)
割り当てバージョン 2 後の出力:
[-1, 0, -1] 1
私は Python のセマンティクスの専門家ではありませんが、この動作は奇妙に思えます。両方の割り当てが割り当てバージョン 1 として動作することを期待します。さらに、次のリンクを確認すると、両方の割り当てバージョンが同じ状態になることが予想されます。
同時代入の Python セマンティクスに関して、私が見逃しているものはありますか?
注a
: たとえば、変数が整数型の場合、この奇妙な動作は再現できないようです。タイプリストである必要a
があるようです(おそらく、これは可変タイプの場合ですか?)。