HW)
Python에서 변수(Variable)가 메모리(Memory)에 저장, 관리되는 방식을 변수의 개념과 메모리의 구조와 함께 이해해보자.
글쓴이도 비전공자인 입문자이기 때문에, 비유를 통한 설명이 조심스럽고 다소 무리라고 생각하지만, 최대한 쉽게 이해하고 개념을 잡기에는 다음과 같이 정리해보는 것도 좋을 것 같다. :)
우선 컴퓨터를 아래 그림과 같이, 쉽게 이해해보자.

CPU 중앙처리장치 :
> 사람(두뇌)에 비유할 수 있다.
- 책상 위에 놓인 책만 처리(읽기, 쓰기, 학습 등) 할 수 있다.
- 책장에 있는 책은 처리할 수 없다.
Memory 주기억장치 :
> 책상 (= RAM)
> 메모리 사이즈 (ex, 16GB)가 곧 책상의 크기이다.
- 책상의 크기가 클 수 록 여러 책을 동시에 책상 위에 놓고 펼칠 수 있는 것과 같다.
- 책상 위에 놓인 책을 책장에 넣는 것은 진행중이었던 작업이 끝나고 메모리에 있던 정보가 사라지는 것(초기화)과 같다.
SSD (or HDD) 보조기억장치 :
> 책장
- 크게는 파티션, 작게는 폴더로 이해해보자.
- 책장의 크기는 곧 용량이다. (ex, 1TB)
여기에서,
책상 위에 놓여 펼쳐진 책(들) :
> 실행중인 Programs
- 부팅 후 실행중인 OS(Window), Python, Colab 등으로 이해해보자.
책장에 보관 중인 책(들) :
> 설치된 Programs
- 작성된 Code도 포함된다.
라고 비유하면, 보다 쉽게 이해할 수 있다.
마찬가지로,
Interpreter & Process
> 책장에서 책을 꺼내서 책상 위에 펼치는 과정(수행)은 운영체제 Window(OS)로 부터, Program(Python...) 실행을 위해서 승인을 받고 메모리에 작업을 위한 영역을 할당 받는 것과 같다.
- 사람(두뇌)이 책의 정보를 처리하는 모든 행위들을 CPU와 RAM 사이에서 일어나는 것으로 이해할 수 있다.
아래 그림은 컴퓨터가 정보를 전달하고 처리하는 과정에 대해서 간단히 표현한 도식으로 특히 RAM의 변수 영역을 주목해보자.

우선, 변수(Variable)를 이해하자!
변수는 어떤 (물리적인) 공간이다!
변수는 Memory(=RAM)에 특정한 값을 저장하기 위해서 할당하는 공간(=사람에게 보여주는 이름)으로 어떤 값(정보)을 저장할 수 있다. 즉 실행하는 프로그램에서 사용하기 위해서 특정한 값을 메모리에 공간을 할당하여 저장하게 된다.
또한, 파이썬에서는 '변수'와 '객체(Object)'가 분리되어 있다는 점을 꼭 명심하자.
변수를 생성(선언)하는 방법은 아래와 같이 단순한 구조이지만, 의미를 제대로 이해하는 것이 매우 중요하다.
변수명(이름) = 값(숫자, 문자 등)
예를 들면, a = 1 의 의미는 ' a 라는 이름을 가진 메모리 주소(id)에 숫자 1을 저장하라.' 이다. 즉 간단히 하면 ' 1을 a에 대입한다. ' 이다. [주의] 'a 는 1 이다' 가 아니다!
아래 코드와 간단히 도식으로 표현하여 이해해보자.
a = 1
b = 2
c = a + b
print(f'c = a + b =', c)
'''
c = a + b = 3
'''

여기에서 화살표로 표시한 '참조한다' 라는 의미는 그림에서 Stack의 특정 공간에서 Heap의 특정 공간을 가리켜 대응하는 것으로 이해할 수 있다.
즉, RAM에서
a 라는 이름의 참조를 만들고 값 (숫자 1)을 참조한다.
b 라는 이름의 참조를 만들고 값 (숫자 2)을 참조한다.
그리고 CPU에서 a + b = c 라는 연산 수행을 하게 되면(process) , 다시 RAM에서
c 라는 이름의 참조를 만들고 값 (숫자 3)을 참조한다.
가 된다. 각 a, b, c 와 1, 2, 3의 공간이 다르기 때문에 주소(id)가 다름을 꼭 상기하자.
*참고로, 서로 다른 지정된 공간 사이에 참조를 어떻게 대응시키느냐에 따라서 같은 주소를 공유시킬 수 있다. (ex, a = b = 1)
연산의 결과(result)인 변수(c)가 참조하는 값(3)을 console(단말기, 모니터)에 출력(print)하면, 코드 실행 결과 3을 확인할 수 있다.
이런 개념을 이해하면, 보다 복잡한 연산과 참조의 연결, 끊김에 대해서도 혼동없이 쉽게 접근할 수 있을 것이다.
[주의] 내용에 오류가 있을 수 있습니다.

'[Code] Study & Practice' 카테고리의 다른 글
| [Python] 자료 구조4 - 이진 트리(Binary Tree)의 개념, 구조, 규칙 (0) | 2025.11.01 |
|---|---|
| [Python] 자료 구조3 - Hash table의 개념과 index 충돌 해결 방식 비교 (0) | 2025.10.30 |
| [Python] 자료 구조2 - Single & Double Linked List(연결 리스트)의 개념과 차이점 (1) | 2025.10.28 |
| [Python] 자료 구조1 - 스택(Stack)과 큐(Queue)의 개념과 차이점 (0) | 2025.10.27 |
| [Python] 2진수의 소수점 연산 불일치와 연산 허용 오차 범위. (0) | 2025.10.21 |