2011-12-21 12 views
17

シンプルで短い質問です。 Pythonで2つの変数を交換するのはとても簡単です:a, b = b, a。それは大丈夫です、私は反対がありません:)しかし、私はそれが内部的にどのように動作するのか興味がありますか?一時的な変数を単独で作成するのか、それとももっと興味深い(私はそうだと思いますか?)可変スワップは内部的にどのように機能しますか?

答えて

31

Pythonのソースコードは、実行前にbytecodeに変換されます。あなたはスワップバイトコードがどのように見えるかを確認するために逆アセンブラdisを使用することにより、内部でどのように機能するかを見ることができます。簡単に言えば

import dis 
>>> def f(a,b): a, b = b, a 
>>> dis.dis(f) 
    1   0 LOAD_FAST    1 (b) 
       3 LOAD_FAST    0 (a) 
       6 ROT_TWO    
       7 STORE_FAST    0 (a) 
      10 STORE_FAST    1 (b) 
      13 LOAD_CONST    0 (None) 
      16 RETURN_VALUE 

、それがスタックにaとbの値をプッシュし、回転(スワップ)トップ2つの要素を選択し、値を再びポップします。

も参照してください:

+0

すごいです!トリックはROT_TWOです...ありがとうございました! –

関連する問題