It's simple. For any two variables
a, b, we can swap their values in a single assignment statement
a, b = b, a
In fact, it works for exchanging values of multiple variables as well
a, b, c = c, a, b
Why does this work?
This might look like a syntactic sugar for swapping variables, but in fact it's a neat application of iterable unpacking.
Simply put: iterable unpacking happens when we assign an iterable to a list or a tuple of variables in a single assignment statement. This might sound more complicated than it actually is, so here's an example.
Let's say we have an array
A = [1, 2, 3]
When we do the following assignment
a, b, c = A
what we're actually doing is equivalent to this:
a = A b = A c = A
Assigning values to multiple variables this way in Python is called iterable unpacking.
So how is this related to swapping variables?
When we write
a, b = b, a two things happen:
- Right-hand side is evaluated first, yielding a tuple with values
(<value of b>, <value of a>)
- This new tuple is then assigned to the left-hand side tuple
a, busing iterable unpacking (note that a tuple is an iterable)
So in effect, we're doing the following three statements, all in a single line of code:
tmp = (b, a) a = tmp b = tmp
Is this a standardized way to swap two variables in Python?
This is actually a perfectly fine, Pythonic way, to perform variable swap. As we explained, it's not a dirty hack, but rather a special case of using iterable unpacking syntax of Python.
Is there a swap function in Python?
No, there's no built-in function in Python that could be used to swap values of variables. But if for any reason you need one, you can simply build it using the swap syntax -
a, b = b, a .