이해 · 그림으로 보기
파이썬 첫걸음: 내용·이름표·실행 창
숫자와 글이 만들어지는 모습을 먼저 보고 다시 찾을 이름표를 붙인다. 코드를 한 줄씩 움직이며 달라진 한 곳과 화면에 나온 결과를 적고, 어느 창에서 무엇을 써야 하는지 확인한다. 학습자는 한 줄마다 달라진 곳을 쉬운 말로 설명하고 직접 실행한 코드·기록·표로 맞춰 본다. 책과 개발 문서에서는 틀린 첫 줄을 찾아 고치는 일을 디버그, 새 문제로 다시 맞춰 보는 일을 검증이라고 부른다.
Python 공식 문서를 기준으로 만든 골드 체험 레슨입니다.코드를 실행하지 않고도 예측·바인딩 추적·오개념 교정·학습 증거까지 한 흐름으로 점검할 수 있습니다.
RETRIEVE
먼저, 지금 가진 변수 모델을 꺼내 보세요
score = 7 다음에 score = "seven"을 실행하면 무엇이 바뀐다고 생각하나요? 정답을 찾기 전에 현재 생각을 한 문장으로 남겨 보세요.
PYTHON RUNTIME MENTAL MODEL
변수 상자보다 이름표로 이해하기
대입은 객체의 타입을 바꾸는 일이 아니라, 이름이 가리키는 객체를 정하거나 바꾸는 일입니다.
- 01이름·객체·값·타입을 서로 구분해 설명할 수 있습니다.
- 02대입 전후에 이름이 어떤 객체에 바인딩되는지 추적할 수 있습니다.
- 03type(name)이 현재 이름이 가리키는 객체의 타입을 확인한다는 점을 설명할 수 있습니다.
Python 프로그램의 데이터는 객체로 표현됩니다. 각 객체에는 정체성, 타입, 값이 있으며 객체의 타입은 생성된 뒤 다른 타입으로 바뀌지 않습니다.
score = 7을 실행하면 현재 이름 공간의 score가 값 7을 나타내는 int 객체에 바인딩됩니다. 이후 score = "seven"을 실행하면 같은 이름이 str 객체를 가리키도록 재바인딩됩니다.
따라서 두 시점의 type(score) 결과가 다른 이유는 score라는 이름의 타입이 변했기 때문이 아니라, 그 이름이 가리키는 객체가 달라졌기 때문입니다.
- 이름(name)
- 이름 공간에서 객체를 참조하도록 바인딩되는 식별자입니다.
- 객체(object)
- Python에서 데이터를 표현하는 단위로, 정체성·타입·값을 가집니다.
- 바인딩(binding)
- 이름과 객체 사이의 참조 관계를 만드는 일입니다.
- 재바인딩(rebinding)
- 이미 바인딩된 이름이 다른 객체를 참조하도록 관계를 바꾸는 일입니다.
PYTHON MENTAL MODEL · 01
변수는 상자가 아니라 이름입니다
네 단계의 Python 대화형 셸 입력을 직접 선택하며 score가 어떤 객체를 가리키는지 추적해 보세요.
01단계 대입: 이름을 정수 객체에 연결합니다
이름을 정수 객체에 연결합니다
리터럴 7을 평가해 얻은 int 객체에 이름 score를 연결합니다. 변수는 값을 담는 상자가 아니라 객체를 가리키는 이름입니다.
Python 대화형 셸
REPL · 독립 입력01 score = 7출력 없음 · 이름 공간만 갱신됨현재 이름 공간
동기화됨| 이름 | 값 | 타입 |
|---|---|---|
| score | 7 | int |
위 코드 실행 결과와 도식의 화살표, 값, 타입이 같은 상태를 보여줍니다.
LINE-BY-LINE TRACE
score가 가리키는 객체 추적하기
name_binding.py검토된 정적 추적 · 5단계- 01
score = 7bind우변의 결과인 int 객체에 score라는 이름을 바인딩합니다.
- 첫 바인딩
- score가 값 7을 나타내는 int 객체를 가리킵니다.
- 이름 공간
- score → 7 · int
- 누적 출력
- 아직 출력 없음
- 02
print(type(score).__name__)observe현재 score가 가리키는 객체의 타입 이름인 int를 출력합니다.
- 타입 관찰
- 바인딩은 그대로이며 타입 이름 int가 출력에 추가됩니다.
- 이름 공간
- score → 7 · int
- 누적 출력
- int
- 03
score = "seven"rebindscore가 값 "seven"을 나타내는 str 객체를 가리키도록 재바인딩합니다.
- 다른 객체로 재바인딩
- score의 바인딩 대상이 int 객체에서 str 객체로 바뀝니다. 이전 int 객체의 실제 수명은 이 추적에서 판단하지 않습니다.
- 이름 공간
- score → "seven" · str
- 누적 출력
- int
- 04
print(type(score).__name__)observe현재 바인딩 대상이 str 객체이므로 str을 출력합니다.
- 새 바인딩의 타입 관찰
- 바인딩은 그대로이며 현재 객체의 타입 이름 str이 출력에 추가됩니다.
- 이름 공간
- score → "seven" · str
- 누적 출력
- int · str
- 05
print(score)observescore가 현재 가리키는 객체의 값인 seven을 출력합니다.
- 현재 값 관찰
- 현재 바인딩된 str 객체의 값 seven이 출력에 추가됩니다.
- 이름 공간
- score → "seven" · str
- 누적 출력
- int · str · seven
int
str
seven객체 ID는 설명용 표식이며 id() 값이나 메모리 주소가 아닙니다. 이전 객체의 실제 수명과 재사용 여부는 구현 세부사항이므로 단정하지 않습니다.
MISCONCEPTION CHECK
“변수가 타입을 바꾼다”는 표현 바로잡기
이 표현은 하나의 객체가 int에서 str로 변한 것처럼 들립니다. Python 객체의 타입은 생성된 뒤 바뀌지 않습니다.
- 이전
- score → 값 7을 나타내는 int 객체
- 이후
- score → 값 "seven"을 나타내는 str 객체
첫 번째 int 객체 자체가 str 객체로 변했나요?
아닙니다. score가 가리키는 대상이 달라졌습니다. 이전 객체의 수명은 별개의 구현 문제입니다.