Search code examples
pythonsyntaxswapconventions

Is there a standardized method to swap two variables in Python?


In Python, I've seen two variable values swapped using this syntax:

left, right = right, left

Is this considered the standard way to swap two variable values or is there some other means by which two variables are by convention most usually swapped?


Solution

  • Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.

    Python docs: Evaluation order

    That means the following for the expression a,b = b,a :

    • The right-hand side b,a is evaluated, that is to say, a tuple of two elements is created in the memory. The two elements are the objects designated by the identifiers b and a, that were existing before the instruction is encountered during the execution of the program.
    • Just after the creation of this tuple, no assignment of this tuple object has still been made, but it doesn't matter, Python internally knows where it is.
    • Then, the left-hand side is evaluated, that is to say, the tuple is assigned to the left-hand side.
    • As the left-hand side is composed of two identifiers, the tuple is unpacked in order that the first identifier a be assigned to the first element of the tuple (which is the object that was formerly b before the swap because it had name b)
      and the second identifier b is assigned to the second element of the tuple (which is the object that was formerly a before the swap because its identifiers was a)

    This mechanism has effectively swapped the objects assigned to the identifiers a and b

    So, to answer your question: YES, it's the standard way to swap two identifiers on two objects.
    By the way, the objects are not variables, they are objects.