앞에서 파이썬의 변수를 설명할 때는 쉬운 이해를 위해 변수를 박스 형태로 그렸습니다.

앞에서 이런 박스 그림이 나왔었습니다.
하지만 파이썬에서의 변수는 실제로는 값을 저장하는 박스가 아닙니다.
값을 저장한 박스는 메모리 상에 따로 존재하고 변수는 단지 그 위치를 가리키는 이름표(참조)에 불과합니다.
이것은 특히 다른 프로그래밍 언어(C++, Java)를 학습했던 사람들에게 혼동을 가져옵니다.
여기서 파이썬에서의 변수를 좀 더 심도 있게 살펴보겠습니다. 만약 이번 절의 내용이 이해되지 않으면 그냥 건너뛰어도 됩니다.
앞에서 변수는 값을 저장하는 상자와 같은 것이라고 하였습니다.
파이썬에서 변수는 객체(object)를 참조하는 이름표이고 실제 데이터는 객체 안에 저장됩니다.
total = 0
price = 100
위의 코드는 실제로 아래와 같이 연결되어 있습니다

이때 total을 100으로 변경하면 아래의 그림과 같이 변경됩니다.
total = 100
price = 100

이렇게 같은 객체를 참조하는지 확인하기 위해 id() 함수를 이용하겠습니다.
total = 100
price = 100
print(id(total))
print(id(price))
<실행 결과>
1513126464
1513126464
total과 price가 동일한 주소를 반환하는 것을 볼 수 있습니다. 주소값은 사용자의 컴퓨터마다 다를 수 있습니다.
아래와 같은 프로그램의 결과는 어떻게 될까요?
a = [10, 20, 30]
b = a
b.reverse() # b가 가리키는 리스트를 역순으로 반환합니다.
print(a, b)
코드를 한 줄씩 살펴보도록 하겠습니다.
a = [10, 20, 30]
첫 번째 문장에서 a라는 이름표를 리스트 [10, 20, 30] 에 붙입니다.
b = a
두 번째 문장에서 b라는 이름표에 a 이름표를 복사합니다. a와 b는 동일한 리스트를 가리킵니다.
b.reverse() # b가 가리키는 리스트를 역순으로 반환합니다.
세 번째 문장에서 b.reverse() 를 하면 b가 가리키고 있던 리스트가 역순 변환을 합니다.
a와 b는 동일한 리스트를 가리키고 있기 때문에 a가 가리키는 리스트도 역순 변환이 됩니다.
따라서 실행 결과는 아래와 같습니다.
<실행 결과>
[30, 20, 10] [30, 20, 10]
위의 파이썬의 문장이 이해되지 않는다면 pyturtor를 실행하여 도움을 얻을 수 있습니다.
http://www.pythontutor.com/visualize.html#mode=edit 에 접속하여 아래의 코드를 입력하고 Visualize Execution 버튼을 누릅니다.
a = [10, 20, 30]
b = a
b.reverse() # b가 가리키는 리스트를 역순으로 변환한다.
print(a, b)
아래의 사진은 pythontutor의 사진입니다.

Visualzie Execution을 누르면 아래의 사진처럼 파이썬 코드가 어떤 원리로 작동하는지 그림으로 볼 수 있습니다.
