ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 기초 정복하기 -2) 변수란? 파이썬에서 변수의 의미
    IT/파이썬 기초 2021. 10. 1. 17:16
    728x90
    SMALL

    앞 장에서, 프로그램이라는 것이 어떻게 동작하고, 파이썬은 어떤 흐름으로 실행되는지에 대해서 알아보았다.

    (참조 : https://2island.tistory.com/21)

     

    이제는 본격적으로 파이썬 문법에 대해서 배워볼 것이다. 

     

    우선 프로그래밍을 처음 배우는 사람이라면 "변수"라는 것이 무엇인지 정확히 인지하여야 한다. 우리가 여지껏 배웠던 변수는 수학에서 배웠던 "어떤 값이 들어올지 모르는, 변할수 있는 수"였다. 즉, 방정식에서 x,y값이 변수였다. 그런데 프로그래밍에서 변수는 조금 의미가 다르다. 바로 "값을 담아두는 공간"으로 해석할 수 있다.

     

    앞 장에서 우리는 휘발성 데이터가 RAM에 저장된다고 했었다. 프로그래밍에서 말하는 변수는 휘발성 데이터이다. 왜냐하면, 프로그램이 끝나면 모두 사용되지 않는 변수이기 때문이다. 따라서 "변수"라 하면, RAM에 값을 담을 수 있도록 할당된 공간을 의미하는 것이다.

     

    파이썬에서 변수를 선언하는 방식은 다음과 같다.

    x = 1
    y = 4
    a = "Hi!"
    b = True

    "변수 이름 = 변수에 넣을 값" 형태로 선언할 수 있다.

    이 의미를 해석해보면 1이라는 값을 x라는 공간에 담는다는 이야기이다. 즉 = 은 수학에서의 equal을 의미하는 것이 아니라, 오른쪽에 있는 값을 왼쪽 공간에 담는다는 의미이다. 이를 그림으로 표현하면 아래와 같다.

     

    바깥의 큰 네모가 RAM이라고 하면, RAM에 x,y,a,b가 각각 공간이 생겨서 그 안에 1, 4, Hi!, True가 들어가 있는 것을 알 수 있다. 다른 프로그램 언어들에서는 이렇게 저장이 된다. 그런데, 파이썬에서는 조금 다른 방식으로 저장된다.

    위의 그림을 보자. 우선 Heap, Stack이라고 쓰여있는 부분이 있을 것이다. 이 둘은 RAM을 구성하고 있는 영역의 일부분이다.

    Heap은 1, 4, Hi!, True와 같이 우측에 들어가는 데이터들, 즉 값들이 저장되는 곳이다. (값이 왜 여기에 저장되는지는 "객체"라는 개념을 알아야 하므로 일단 패스하겠다.) 이 값들은 Heap에 저장되고, x,y,a,b공간이 이 값들을 각각 가리키고 있는 형태가 된다. 즉, 값 자체를 공간안에 집어 넣는 것이 아니라, 값이 있는 주소값을 각 공간에 넣어두는 것이다. 후에 코드에서 x에 접근하게 되면, x에 들어있던 주소값으로 찾아가서 값을 찾아주는 방식이다. 나머지 y,a,b도 마찬가지로 코드 내에서 이 변수들에 접근하게 되면 주소를 찾아가서 값을 가져온다.

     

    그렇다면, 아래 코드는 어떨까?

    x = 1
    y = 1

    이런 코드가 있다고 가정해보자. 이런 코드는 메모리 상으로 어떻게 구성될거 같을지 한번 상상해보자.

    아마 위 두 그림 중 하나로 상상했을 것으로 예상된다. 둘 중에 어느게 맞는 그림일까?

    바로, 오른쪽에 있는 그림이 맞는 그림이다. 왜냐하면, Heap에 숫자 데이터 (여기서는 1)가 들어가게되면, 변하지 않는다. 즉, 1이라는 값이 대입된 변수들은 모두 1이 할당된 주소값을 가지고 있기 때문이다. 이는 문자열도 마찬가지이다. 문자열도 Heap 영역에 한번 들어가면 변하지 않기 때문에, 같은 문자열을 대입했을 경우 같은 주소값을 가지고 있게 된다. 이를 코드로 확인해보자.

     

    x = 1
    y = 1
    print(id(x))
    print(id(y))

    print()의 의미는 ()안에 담긴 값을 실제로 모니터에 출력한다는 의미이다. 따라서 이 코드를 실행하면, print()에서 ()안에 담긴 값이 출력된다. 여기서는 id(x)와 id(y)가 출력될 것이다. id()는 ()에 들어간 변수의 주소값이 뭔지 알려주는 함수이다. 따라서 위의 코드는 x와 y안에 담긴 주소값이 무엇인지 화면에 출력해주는 함수이다. 위 코드를 실행해보면, 같은 값이 나오는 것을 알 수 있다.

     

    (참고 : 코드를 실행할 수 있는 에디터를 설치하지 않았고, 설치하고 싶지 않다면 https://ideone.com/ 이 사이트를 이용해보자. 이 사이트에서 좌측 하단에 언어를 선택하는 곳에서 Python3를 선택해주면 파이썬 코드를 실행해볼 수 있다.)

     

    9079008 이라는 같은 숫자 두개가 출력된 것을 알 수 있다. x에 담긴 주소값과 y에 담긴 주소값이 같다는 것이다.

    위 코드 블럭에서 x와 y에 같은 문자열을 입력하고 코드를 실행해봐도 같은 주소값이 나오는 것을 알 수 있다.

     

    이렇게, 파이썬은 다른 언어와는 조금 다르게 모든 것이 주소값을 통해 가져오는 방식으로 구현되어있다. 

    728x90
    LIST

    댓글

Designed by Tistory.