Python で 2 つの変数を交換する方法 (一時変数なし)
Python で 2 つの変数を交換する方法を学びます。 Python のタプルのパッキングとアンパッキングを理解し、従来の一時変数のスワップと比較します。
概要
2 つの変数の値の交換は、並べ替えアルゴリズム、変数の再割り当て、値のローテーションで使用される古典的な操作です。 C、C++、Java などの低レベルのプログラミング言語では、スワップでは、代入中に上書きされないように、1 つの値を保持する一時変数を宣言する必要があります。
Python では、一時ストレージを使用せずに、このスワップを 1 行で実現できます: `a, b = b, a`。このエレガントなアプローチはクリーンであるだけでなく、高度に最適化されています。内部では、Python はタプルのパッキングとアンパッキングを使用して、スワップを安全に実行します。
Python が `a, b = b, a` を評価するとき、まずメモリ内に値 `(b, a)` を含むタプルを構築します (タプル パッキング)。次に、そのタプルを左側の変数に解凍し、「b」の古い値を「a」に割り当て、「a」の古い値を「b」に割り当てます(タプルのアンパック)。これにより、データが衝突することなく両方の変数が同時に更新されることが保証されます。
コードと実行の出力
このコードは、タプルのアンパックを使用して Python で 2 つの変数を交換する方法を示し、従来の一時変数の方法と比較します。
x = 10
y = 20
print(f"Original: x = {x}, y = {y}")
# 1. The Pythonic Way (Tuple unpacking)
x, y = y, x
print(f"Pythonic Swap: x = {x}, y = {y}")
# 2. The Traditional Way (Using a temporary variable)
temp = x
x = y
y = temp
print(f"Traditional Swap: x = {x}, y = {y}")Original: x = 10, y = 20
Pythonic Swap: x = 20, y = 10
Traditional Swap: x = 10, y = 20段階的な実装
- 値を受け取りたい変数を代入の左側に配置します: 変数 1、変数 2。
- ソース値を含む変数を右側に配置します (変数 2、変数 1)。
- 代入演算子 (=) を使用して、Python の自動タプル パッキングとアンパッキング スワップをトリガーします。
よくある質問
タプルのアンパックスワップは競合状態から安全ですか?
シングルスレッド環境では、左側の変数への代入が開始される前に右側の式がタプルとして完全に評価されるため、完全にアトミックです。
3 つ以上の変数を同時に交換できますか?
はい!同じタプル構文を使用して、任意の数の変数を交換できます。たとえば、a、b、c = b、c、a は値を左にシフトします。
関連トピック
推奨される Python リソース
関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。
Python の変数とデータ型の説明
Python 変数と主要なデータ型 (文字列、整数、浮動小数点数、ブール値) を理解します。 Python でのメモリ割り当ての完全な初心者ガイド。
Python 文字列メソッドのチートシート
Python 文字列操作の完全なリファレンス ガイド。文字列プロパティの書式設定、検索、分割、置換、チェックをマスターします。
Python と JavaScript: どちらのプログラミング言語が最適ですか?
Python と JavaScript の包括的な比較。構文の違い、パフォーマンス、使用例 (バックエンドとフロントエンド)、およびコーディング例を調べます。