24
votes

Simple and short question. Swapping two variables in Python is very easy: a, b = b, a. That's ok, I have no objections :) But I'm interested how it works internally? Does it create some temporary variable by itself or it is something more interesting (I bet so)?

1

1 Answers

39
votes

Python source code is converted to bytecode before it is executed. You can see how the swap works internally by using the disassembler dis to see what the bytecode looks like:

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 

In simple terms, it pushes the values of a and b on the stack, rotates (swaps) the top two elements, then pops the values again.

See also: