연오는 변수 x
와 변수 y
의 데이터를 서로 교환하여 출력하는 프로그램을 작성했다.
# 변수에 대입되어 있는 데이터
x = 10
y = -20
# 두 변수의 데이터를 서로 교환하기 (이 부분을 수정하시오)
x = y # 변수 x에 변수 y의 데이터를 대입한다.
y = x # 변수 y에 변수 x의 데이터를 대입한다.
# 바뀐 결과를 출력한다.
print(x) # -20이 출력된다. (-20이 출력되어야 한다)
print(y) # -20이 출력된다. (10이 출력되어야 한다)
그런데 프로그램을 실행해 보니 두 변수의 데이터가 전부 -20이 되어 버렸다. 프로그램이 의도대로 동작하지 않은 이유는 무엇인가? 그 이유를 찾고 프로그램을 올바르게 수정해 보라
프로그램이 의도대로 동작하지 않은 이유
x = y
를 실행하면 x
에 대입된 값이 y
에 대입된 값으로 바뀐다. 그래서 x
에 원래 대입되어 있었던 값은 사라진다.y = x
를 실행하면, y
에 x
에 원래 대입되어 있던 값이 아니라 x
에 새로 대입된 값이 대입된다. 이 값은 y
에 대입되어 있던 -20이므로 x
와 y
가 둘 다 -20이 된다.수정한 프로그램 코드
# 변수에 대입되어 있는 데이터
x = 10
y = -20
# 두 변수의 데이터를 서로 교환하기
x, y = y, x
# 바뀐 결과를 출력한다.
print(x)
print(y)
실행 결과
-20
10
x, y = y, x
와 같이 시퀀스 패킹과 언패킹을 활용하면 편하다. 그러면 대입 연산자 우변의 (y, x)
튜플이 먼저 (10, -20)
튜플로 평가되며, 그 다음으로 좌변의 변수 x
와 변수 y
에 우변의 튜플의 원소가 각각 대입된다.x
의 값을 임시로 보관하는 임시 변수를 이용하는 방법도 있다. 임시 변수의 이름을 temp
라고 하면, temp = x
, x = y
, y = temp
, del temp
를 차례대로 실행하면 된다. 하지만 패킹과 언패킹을 활용하는 방법이 더 간결하고 직관적이다.