이 글에서는 파이썬(Python)을 사용해 단 한 줄의 코드로 두 변수의 값을 서로 교환(swap)하는 방법을 알아봅니다. 파이썬에서 변수를 교환하는 기본적인 방법은 매우 간단하고 직관적입니다.
>>> a = 20; b = 30
>>> a
20
>>> b
30
>>> # 한 줄로 두 변수의 값 교환하기
>>> a, b = b, a
>>> a
30
>>> b
20
위 코드를 실행하면 a와 b의 값이 서로 맞바뀌어 출력되는 것을 확인할 수 있습니다.
동작 원리 설명
파이썬은 표현식(expression)을 왼쪽에서 오른쪽으로 평가합니다. 하지만 할당(assignment) 문을 평가할 때는 예외적으로 오른쪽 항을 먼저 평가한 뒤 왼쪽 항을 평가합니다.
즉, a, b = b, a 표현식은 다음과 같은 순서로 처리됩니다.
오른쪽 항 평가: 먼저 오른쪽의 'b, a'가 평가됩니다. 이 과정에서 메모리에 두 개의 요소를 가진 튜플(tuple)이 생성되며, 그 요소들은 프로그램 실행 중 해당 문장을 만나기 전에 이미 존재하던 식별자 b와 a가 가리키는 객체들입니다.
튜플 생성 후 대기: 튜플이 생성된 시점에는 아직 어떠한 할당도 이루어지지 않았습니다. 하지만 이는 전혀 문제가 되지 않는데, 파이썬이 내부적으로 해당 튜플 객체의 위치를 알고 있기 때문입니다.
왼쪽 항 평가 및 언패킹: 그다음 왼쪽 항이 평가됩니다. 왼쪽은 두 개의 식별자 a와 b로 구성되어 있으므로, 메모리에 저장된 튜플이 왼쪽으로 할당되면서 언패킹(unpacking)됩니다. 즉, 튜플의 첫 번째 요소(b의 값)가 첫 번째 식별자 a에 할당되고, 두 번째 요소(a의 값)가 두 번째 식별자 b에 할당됩니다.
요약하면, a, b = b, a라는 표현식은 오른쪽의 첫 번째 값이 왼쪽의 첫 번째 변수에, 오른쪽의 두 번째 값이 왼쪽의 두 번째 변수에 동시에 할당되기 때문에 a와 b의 값이 자연스럽게 교환되는 것입니다. 이것이 바로 파이썬이 별도의 임시 변수 없이도 우아하게 변수를 스왑할 수 있는 이유입니다.