a라는 변수에는 -5라는 값이 저장되어 있고, b라는 변수에는 2라는 값이 저장되어 있습니다.
a = -5
b = 2
이 두 개의 변수가 가지고 있는 값을 서로 교환하려면 (맞바꾸려면) 어떻게 해야 할까요?
아래와 같이 쓰면 될까요?
a = 2
b = -5
그렇습니다. 그렇게 하면 a와 b의 값을 서로 바꿀 수 있습니다. 실제로 첫 번째 코드와 두 번째 코드를 보면 값이 교환되었다는 것을 확인할 수 있으니까요.
a와 b의 값을 이미 알고 있기 때문에 그렇게 코드를 작성하면 됩니다.
그런데 말입니다...
애초에 a와 b의 값을 모른다면 어떻게 될까요?
a = -5
위의 코드를 통해서 우리는 a의 값이 -5라는 것을 알 수 있습니다. 그런데, a의 값이 어떤 것인지 구체적으로 알 수 없는 경우가 있습니다. 아래의 코드를 보세요.
a = x
이 코드는 "변수 x의 값을 변수 a에 저장하는" 코드입니다. 여기서 변수 x의 값을 우리는 알 수 없습니다. 숫자일 수도 있고 문자열일 수도 있습니다. 어떤 값인지는 알 수 없지만 변수 x의 값이 변수 a에 저장된다는 것만은 분명히 알 수 있습니다.
아래의 코드는 무슨 뜻일까요?
a = x
b = y
변수 a에 변수 x의 값을 저장하고, 그리고 변수 b에 변수 y의 값을 저장하는 코드입니다. x와 y의 값은 현재 알 수 없습니다.
그렇다면, x와 y의 값을 정해볼까요?
x = -5
y = 2
a = x
b = y
자, 위의 코드를 보면 변수 x의 값과 변수 y의 값이 구체적으로 무엇인지 알 수 있습니다. 그래서 변수 a의 값과 변수 b의 값이 무엇인지도 알 수 있습니다. 즉, 변수 a의 값은 -5가 되며, 변수 b의 값은 2가 됩니다.
확인해 볼까요? 화면에 값을 표시하면 확인이 되지요. 다음과 같이 코드를 짭니다.
x = -5
y = 2
a = x
b = y
print(a)
print(b)
위의 코드를 실행해 보세요. 예상대로 결과가 나왔지요?
a = x
b = y
위의 코드에서 a와 b의 값을 맞바꾸려면 어떻게 해야 될까요?
아래처럼 하면 될까요?
a = y
b = x
그렇습니다. 잘하셨습니다.
한 가지 더 해보겠습니다. 다시, 변수 a와 변수 b가 있습니다.
a
b
각 변수에는 (구체적으로 알 수는 없지만) 각각 어떤 값이 저장되어 있습니다. 이 두 변수가 가지고 있는 각각의 값을 서로 교환하려면 어떻게 해야 할까요?
값을 서로 교환한다는 것은, a값이 b에 저장되어야 하고, 또 동시에 b의 값이 a에 저장되어야 한다는 의미입니다. 그럼, 아래처럼 코드를 작성하면 될까요?
a = b
b = a
아닙니다. 위의 코드를 print 명령어를 써서 실행해 보면 알 수 있습니다. a와 b는 같은 값을 가지게 됩니다. 서로 교환된 것이 아닙니다.
왜 그럴까요?
코드를 자세히 살펴보면 알 수 있습니다.
먼저 "a = b" 가 실행되면 b의 값을 a에 저장하게 됩니다. 그렇게 되면 원래 a가 가지고 있는 값이 b의 값으로 바뀌게 된다는 뜻입니다. 원래 a가 가지고 있는 값이 없어지는 것이지요. 그래서 두 번째 코드 "b = a"를 실행하면 a의 바뀐 값이 b에 저장됩니다. a의 원래 값이 아닌!
이 문제를 어떻게 해결하면 될까요?
변수 하나를 더 써서 바뀌기 전의 값을 저장해 놓으면 됩니다. 아래 코드처럼요.
c = a
a = b
b = c
첫 줄 "c = a"는 이런 뜻입니다. a의 값이 곧 b의 값으로 바뀔 거니까 바뀌기 전에 다른 변수 c를 하나 마련하여 a의 값을 저장해 둡니다.
둘째 줄 "a = b"는 이런 뜻입니다. 이제 안심하고 b의 값을 a에 저장합니다. a의 값은 c에 저장해 놓았으니까요. (절반이 교환되었습니다.)
셋째 줄 "b = c"는 이런 뜻입니다. b에 c의 값을 저장합니다. c에는 a가 원래 가지고 있던 그 값이 저장되어 있습니다. (나머지 절반이 교환되었습니다.)
어려운가요? 이 과정을 그림으로 그려본다면 보다 쉽게 이해가 될 것입니다. 한 손에는 책을 들고 또 다른 손에는 우산을 들고 있었는데, 비가 와서 우산을 펼쳐야 합니다. 그런데 한 손으로는 우산을 펼 수가 없으니까 책을 잠시 옆 사람에게 맡겨 놓고 우산을 편 다음, 맡겨놨던 책을 다시 돌려받는 것과 비슷한 과정입니다.