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[0]
b = A[1]
c = A[2]

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:

  1. Right-hand side is evaluated first, yielding a tuple with values (<value of b>, <value of a>)
  2. This new tuple is then assigned to the left-hand side tuple a, b  using 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[0]
b = tmp[1]

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 .