Python では、次の構文を使用して 2 つの変数値が交換されるのを見たことがあります。
left, right = right, left
これは 2 つの変数値を交換する標準的な方法と考えられますか、それとも慣例により 2 つの変数を交換する最も一般的な方法は他に何かありますか?
ベストアンサー1
Python は式を左から右に評価します。代入を評価する際、右側が左側より先に評価されることに注意してください。
つまり、式は次のようになりますa,b = b,a
。
- 右側
b,a
が評価され、つまり、メモリ内に 2 つの要素のタプルが作成されます。2 つの要素は、プログラムの実行中に命令が見つかる前に存在していた識別子 および で指定されたオブジェクトb
ですa
。 - このタプルの作成直後は、このタプル オブジェクトの割り当てはまだ行われていませんが、それは問題ではありません。Python は内部的にその場所を認識しています。
- 次に、左側が評価されます。つまり、タプルが左側に割り当てられます。
- 左側は 2 つの識別子で構成されているため、タプルは展開され、最初の識別子が
a
タプルの最初の要素 (名前が であったため、スワップ前はbb
であったオブジェクト)に割り当てられ
、2 番目の識別子b
がタプルの 2 番目の要素 (識別子が であったため、スワップ前はaa
であったオブジェクト)に割り当てられます。
このメカニズムにより、識別子に割り当てられたオブジェクトが効果的に交換されa
、b
したがって、あなたの質問に答えると、はい、それは 2 つのオブジェクトの 2 つの識別子を交換する標準的な方法です。
ちなみに、オブジェクトは変数ではなく、オブジェクトです。