11

次の 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 として動作することを期待します。さらに、次のリンクを確認すると、両方の割り当てバージョンが同じ状態になることが予想されます。

Google ブックスの本の抜粋へのリンク

同時代入の Python セマンティクスに関して、私が見逃しているものはありますか?

a: たとえば、変数が整数型の場合、この奇妙な動作は再現できないようです。タイプリストである必要aがあるようです(おそらく、これは可変タイプの場合ですか?)。

4

1 に答える 1