1. ホーム
  2. python

[解決済み] Pythonで2つの変数を入れ替える標準的な方法はありますか?

2022-03-24 12:56:41

質問

Pythonで、この構文を使って2つの変数の値を入れ替えたのを見たことがあります。

left, right = right, left

これは、2つの変数の値を入れ替える標準的な方法と考えられていますか?それとも、慣習的に2つの変数の値を入れ替える最も一般的な他の方法がありますか?

どのように解決するのですか?

<ブロッククオート

Pythonは式を左から右へ評価します。その間に 代入の評価では、右辺が先に評価されます。 左手側

Python docs: 評価順序

つまり、この式は次のようになります。 a,b = b,a :

  • 右側部分 b,a が評価される。つまり、2つの要素からなるタプルがメモリ上に生成される。この2つの要素とは、識別子 ba を、プログラム実行中にその命令に遭遇する前に存在していた。
  • このタプルの生成直後、このタプルオブジェクトの代入はまだ行われていませんが、それは問題ではありません、Pythonは内部的にそれがどこにあるかを知っています。
  • そして、左辺が評価される、つまり、タプルが代入されるのです。
  • 左辺は2つの識別子から構成されているので、タプルを解凍して、最初の識別子である a はタプルの最初の要素に割り当てられます(これは以前は b という名前を持っていたので、スワップされる前に b )
    と、2つ目の識別子である b はタプルの2番目の要素に割り当てられます(これは、以前は a であったため、スワップされる前の識別子は a )

この仕組みにより、識別子に割り当てられたオブジェクトが効果的に入れ替わりました ab

では、質問にお答えします。はい、2つのオブジェクトの2つの識別子を入れ替えるのが標準的な方法です。
ちなみに、オブジェクトは変数ではなく、物です。