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` .