두목넷으로
왕딱지 파이썬 · 2강 · 값에 이름표 붙이기 · 인쇄는 머리글/바닥글(날짜·URL)을 꺼 주세요 — 쪽 머리·꼬리는 이미 들어가요
dumok.net ·
dumok.net · 왕딱지 파이썬 ·
dumok.net ·
[ ] / –쪽 🏠
02
LESSON 02 · 15분
값에 이름표 붙이기
다시 쓸 값은 이름으로 불러요

딱지 지도 — 지금 여기

00준비운동
01한 줄 부탁
02이름표
03계산 차례
040번 칸
05여러 칸
06목록
07갈림길
08하나씩
09동안
10이름 찾기
11함수
12졸업
이번 강에서 뗄 딱지
  • 값에 이름을 붙이고, 그 이름으로 다시 꺼내 써요.
  • 등호를 ‘오른쪽 값을 왼쪽 이름에 연결’로 읽어요.
  • 이름은 같아도 나중에 연결된 값이 달라질 수 있음을 알아요.
  • 바꾸지 않기로 한 값과 숫자·글자의 종류를 구별해요.
도착점 값에 이름표를 붙여 그 이름으로 다시 꺼내 보여 주고, 값을 바꿔 붙인 뒤 마지막 값을 맞혀 봐요.
dumok.net
오늘의 딱지

지난 시간에는 글자를 바로 보여 줬어요. 이번에는 잠깐 맡겨 두었다가 이름으로 불러 볼 거예요. 냉장고 반찬통에도 이름을 붙이면 찾기 쉽지요? 컴퓨터에게도 그런 이름표가 있으면 편해요.

오늘 도착점은 네 가지.

  1. 값에 이름을 붙이고, 그 이름으로 다시 꺼내 써요.
  2. 등호를 ‘오른쪽 값을 왼쪽 이름에 연결’로 읽어요.
  3. 이름은 같아도 나중에 연결된 값이 달라질 수 있음을 알아요.
  4. 바꾸지 않기로 한 값과 숫자·글자의 종류를 구별해요.

오늘은 값을 다른 종류로 바꾸지 않아요. 형 변환은 3강에서 만나요. 지금은 이름표와 값, 둘의 관계만 또렷하면 돼요.

오늘의 도착점: 값에 이름표를 붙여 그 이름으로 다시 꺼내 보여 주고, 값을 바꿔 붙인 뒤 마지막 값을 맞혀 봐요.

날짜:  내가 붙이고 싶은 이름표:

그림으로 보기
1메모리4값 4 · 이름표 count 연결2출력4이름 count로 찾아 출력3메모리46같은 이름, 값 6으로 다시 연결4종류 확인숫자·글자를 가려요
그림 2-1이름으로 찾는 오늘의 길 — 대입(이름 연결) → 이름으로 출력 → 값 다시 연결 → 종류 확인. 화살표는 진행 방향을 뜻해요.
오늘 외울 딱지먼저 다섯 장
✂ 오려서 들고 다니세요
변수
개념
값을 다시 쓰려고 붙이는 이름이에요
=
대입 기호
오른쪽 값을 왼쪽 이름에 연결해요
재대입
동작 이름
같은 이름에 값을 다시 연결해요
상수
약속
바꾸지 않기로 정한 값이에요
type
내장함수 이름
값의 종류를 알려 줘요

type은 ‘타입’이라고 읽어요. print처럼 파이썬에 미리 준비된 함수예요. 오늘 새로 외울 예약어는 없어요. 변수·상수라는 한글도 코드에 적어야 하는 명령은 아니에요.

변수는 ‘변할 수 있는 수’라는 말처럼 들리지만, 숫자만 맡기는 것은 아니에요. 글자도 이름으로 불러 쓸 수 있어요. 이름은 찾는 표지, 값은 실제 내용. 이 둘을 나누어 기억해요.

카드를 가리고 말해 볼까요?

  • 오른쪽 값을 왼쪽 이름에 연결하는 기호:
  • 같은 이름에 다시 연결하는 일:
  • 값의 종류를 묻는 함수:

답은 =, 재대입, type이에요. 한 번에 다 외워지지 않아도 괜찮아요. 이제 그림에서 계속 만날 거예요.

그림으로 보기
메모리41000번지count
그림 2-2이름·내용·연결 세 조각 — 이름표 count는 찾을 때 쓰는 이름, 칸 속 4는 실제 내용, 둘을 잇는 선이 대입 연결이에요. 등호는 오른쪽 값 → 왼쪽 이름으로 읽어요.
생활 비유공방 재료 바구니에 이름표를 달아요

동네 공방에서 작은 장식을 만든다고 해 봐요. 오늘 쓸 구슬을 바구니에 담고 ‘오늘 재료’라고 적어요. 누가 “오늘 재료 좀 가져와 주세요” 하면 바구니를 찾으면 되겠지요?

구슬이 몇 개인지 매번 길게 설명하지 않아도 돼요. 이름표로 부르면 그때 연결된 내용을 찾을 수 있으니까요. 그래서 이름을 만들어요. 다시 쓰려고, 무엇에 쓰는 값인지 알아보려고요.

처음에는 오늘 재료를 4개로 정했어요. 잠시 뒤 준비를 바꾸어서 6개를 쓰기로 해요. 이름은 ‘오늘 재료’ 그대로지만, 지금 불러오는 내용은 달라졌어요. 이것이 재대입을 이해하는 출발점이에요.

실제 파이썬은 바구니 속 구슬을 사람처럼 갈아 넣는 것은 아니에요. 이름표가 다른 값 쪽을 가리키게 된다고 생각하면 더 정확해요. 그림에서는 예전 연결을 지우고 새 연결을 그릴 거예요.

그림으로 보기
count오늘 재료4개처음 · count = 4count오늘 재료6개계획 변경 · count = 6같은 이름표로다시 찾아요이름표 = count (그대로) · 내용 = 4 → 6 (바뀜)
그림 2-3공방 이름표 비유 — 생활 비유이며 실제 파이썬의 객체 수정 동작은 아니에요. 이름표 count는 그대로이고, 그 이름표로 찾아오는 값이 4에서 6으로 바뀌었어요.
메모리 그림이름표를 따라가요
코드count = 4print(count)print(count)예제 1 · 세 줄실행 전 · 이름 없음메모리41줄 뒤 · 이름표 count → 4출력4↵4↵2·3줄 뒤 · 연결 유지 · 출력대입 실행print 두 번
그림 2-4첫 대입 전→후 — 개념도이며 실제 메모리 주소가 아니에요. 두 번 불러도 값이 없어지지 않아요.

먼저 이름이 없어요. 대입을 실행하고 나면 이름표로 값을 찾을 수 있어요. 그다음 print가 이름을 만나면 그 이름이 가리키는 값을 받아 보여 줘요.

중요한 구별 하나. 코드에 count라고 썼다고 해서 화면에도 count라는 영어가 나오는 것은 아니에요. 따옴표가 없는 이름은 연결된 값을 찾는 데 쓰여요.

예제 1한 번 이름 붙이고 두 번 쓰기

count는 ‘개수’라는 뜻으로 고른 이름이에요. 파이썬이 정해 둔 특별한 명령은 아니에요. 이번에는 책과 똑같이 소문자로 적어요.

main.py
count = 4print(count)print(count)
실행 결과
4
4

첫 줄에서는 이름만 연결해요. 대입 자체는 화면에 값을 보여 주지 않아요. 둘째 줄과 셋째 줄의 print가 각각 4를 보여 줬어요. 매번 숫자를 직접 적지 않아도 같은 이름으로 다시 쓸 수 있네요.

예제 2 · 글자 값도 맡겨요

이번 예제는 앞의 코드를 지우고 새로 실행해요. item은 ‘물건’이라는 뜻으로 정한 이름이에요.

main.py
item = "리본"print(item)print("item")
실행 결과
리본
item

둘째 줄의 item에는 따옴표가 없어요. 그래서 이름을 따라가서 리본이라는 값을 찾았어요. 셋째 줄은 큰따옴표 안에 item을 적었지요? 이때는 그 네 글자 자체를 보여 줘요.

둘을 함께 쓰면 안내 문구 옆에 현재 값을 붙일 수 있어요. 아래 두 줄만 새로 실행해 봐요.

main.py
item = "리본"print("item:", item)
실행 결과
item: 리본

따옴표 안의 item:은 안내 글, 바깥의 item은 값을 찾는 이름이에요. 쉼표로 나누었으니 둘 사이에는 빈칸 하나도 들어가요.

print(item) ·이름표로 찾기코드print(item)메모리리본이름표 item → 값출력리본↵이름 따라가기찾은 값 출력print("item")· 글자 그대로코드print("item")글자 덩어리 "item"이름표를 거치지 않아요출력item↵글자로 받기그대로 출력둘을 함께 ·print("item:",item)코드print("item:", item)출력item:리본↵안내 글 + 빈칸 + 찾은 값함께 출력
그림 2-5따옴표 하나로 갈리는 두 길 — 공통 준비는 item = "리본". 따옴표가 없으면 이름표로 값을 찾고, 있으면 글자 그대로예요. 실제 메모리 배치가 아닌 개념도예요.
코드item = "리본"print(item)print("item")예제 2 · 세 줄메모리리본1줄 뒤 · 이름표 item → 값출력리본↵item↵출력 · 첫째 줄 / 둘째 줄대입값 찾기 · 글자그대로
그림 2-6이름인가 글자인가 — 따옴표가 없는 item은 이름을 따라 값을 찾고, 따옴표 안의 item은 네 글자 그대로예요.

예제 3 · 같은 이름에 다시 대입하기

main.py
count = 4count = 6print(count)
실행 결과
6

둘째 줄까지 실행한 뒤 count가 가리키는 값은 6이에요. 그다음 출력하니 6이 나왔어요. 4와 6이 함께 나오거나 저절로 더해지는 것은 아니에요.

등호는 이렇게 읽어요. 오른쪽의 6을 왼쪽 이름 count에 연결한다. 수학 시간처럼 ‘양쪽이 같은가?’ 하고 묻는 것이 아니에요. 그 비교는 다음 강에서 따로 배워요.

실행 전실행 후메모리4count메모리6★countcount = 6옛 연결은 지워지고 새 연결만남아요
그림 2-7재대입 확대 — 등호는 오른쪽 값을 왼쪽 이름에 연결해요. 4 객체를 6으로 고쳐 쓰는 그림이 아니고, 값 4의 폐기·메모리 해제도 그리지 않아요.

예제 4 · 바꾸지 않기로 한 값, 상수

공방에서 장식 한 세트에 넣을 구슬 수를 5개로 정했어요. 작업 중에는 바꾸지 않기로 약속할게요.

main.py
BEADS_PER_SET = 5print(BEADS_PER_SET)
실행 결과
5

이름은 ‘한 세트당 구슬 수’라는 뜻으로 골랐어요. 단어 사이의 밑줄 _은 스페이스바로 띄운 빈칸이 아니에요. 하나의 이름을 읽기 쉽게 이어 준 기호예요.

상수는 바꾸지 않기로 약속한 값이에요. 파이썬에서는 이런 용도의 이름을 보통 영어 대문자로 적어요. 이 규칙을 ‘관례’라고 해요. 사람들이 알아보기 좋게 함께 지키는 방식이라는 뜻이지요.

하지만 대문자를 쓴다고 파이썬이 재대입을 막아 주지는 않아요. 자동 잠금장치가 아니라, 사람에게 보여 주는 약속이에요. 이번 예제에서는 그 약속대로 값을 바꾸지 않아요.

실행 전 · 이름 없음메모리5이름표 BEADS_PER_SET → 5 (대문자·밑줄 관례)출력5출력 · 약속대로 바꾸지 않아요BEADS_PER_SET = 5print(BEADS_PER_SET)
그림 2-8상수는 잠금이 아니라 약속 — 대문자+밑줄 관례로 '작업 중 바꾸지 않기로 해요'를 알려요. 대문자라고 재대입이 금지되는 것은 아니에요.

이름표를 만들 때의 작은 약속

처음에는 영어 소문자로 뜻이 떠오르는 이름을 쓰면 편해요. 단어를 이어 쓸 때는 밑줄을 써요. 숫자를 쓸 수도 있지만 숫자로 시작할 수는 없어요. 또 이름 중간에 빈칸은 넣지 않아요.

대문자와 소문자도 구별해요. 같은 낱말처럼 보여도 다르게 적으면 다른 이름이에요. 지금은 영어 철자 공부보다 한 번 정한 이름을 똑같이 쓰기가 먼저예요.

print나 type처럼 이미 쓰는 함수 이름을 내 변수 이름으로 고르지 않아요. 예약어도 이름으로 쓸 수 없어요. 오늘은 count, item처럼 새 이름만 사용하면 충분해요.

예제 5 · 모양이 같아도 종류는 달라요

type에 값을 건네면 값의 종류를 알려 줘요. 그 답을 화면에서 보려면 바깥에서 print로 보여 달라고 해요. 안쪽에서 종류를 알아내고, 바깥에서 보여 주기. 이 순서예요.

main.py
print(type(8))print(type("8"))print(type(1.5))
실행 결과
<class 'int'>
<class 'str'>
<class 'float'>

조금 낯선 영어가 나왔네요. 오늘은 꺾쇠와 class를 외우지 않아도 돼요. 작은따옴표 안의 이름만 먼저 읽어요.

출력 속 이름읽기쉬운 뜻방금 확인한 값
int인트정수, 소수점 없는 수8
str에스티알문자열, 글자들의 묶음"8"
float플로트소수점을 쓰는 수를 다루는 종류1.5

숫자처럼 생겼어도 큰따옴표로 묶은 "8"은 글자 값이에요. 한 글자여도 문자열이라고 불러요. ‘문자열은 꼭 긴 문장이어야 한다’고 생각하지 않아요.

위 출력에 작은따옴표가 보인다고 앞 강과 모순되는 것은 아니에요. 이번에는 글자 8을 출력한 게 아니라, type이 알려 준 종류 정보를 출력한 거예요. 그 정보가 위와 같은 모양으로 표시돼요.

내가 건네는 값type의 답(종류)print가 보여 준 출력18int<class 'int'>2"8"str<class 'str'>31.5float<class 'float'>
그림 2-9종류를 물어보는 세 줄 — 안쪽에서 type으로 종류를 알아내고, 바깥에서 print로 보여 줘요. 종류를 확인했을 뿐 값의 종류를 바꾸지는 않았어요.

예제 6 · 이름으로 찾은 값의 종류도 물어봐요

main.py
label = "8"print(label)print(type(label))
실행 결과
8
<class 'str'>

첫 출력만 보면 숫자 8과 비슷하지요? 하지만 type으로 확인하니 str, 글자 값이에요. 출력 모양만 보고 종류를 단정하지 않기. 오늘 꼭 챙길 습관이에요.

변수 이름이 label이어서 글자가 된 것은 아니에요. 오른쪽에 적은 "8"이 글자 값이기 때문이에요. 이름이 종류를 정해 주는 마법은 아니랍니다.

실행 전 · label 없음메모리"8"대입 후 · 이름표 label → 글자 값코드print(label)2줄 · 연결된 값 그대로 출력코드print(type(label))3줄 · 종류를 물어봐요출력8↵<class'str'>↵출력 두 줄대입값 그대로종류 물어보기눈으로 확인
그림 2-10보이는 모습과 종류 — 값 카드의 따옴표 "8"는 표기용이고 실제 출력 첫 줄에는 따옴표가 없어요. 모양만 보고 종류를 단정하지 않아요.
결과 따라 적기지금 이름이 가리키는 값은?

예제 3으로 돌아가요. 위에서 아래로 한 줄씩만 따라가 보세요. 아직 실행하지 않은 줄의 값을 미리 적지 않아요.

실행한 곳count가 가리키는 값그 줄에서 새로 출력한 것
실행 전이름이 아직 없어요없어요
첫째 줄 뒤4없어요
둘째 줄 뒤6없어요
셋째 줄 뒤66

대입을 두 번 했다고 결과가 두 줄 나오지는 않아요. 화면에 보여 달라는 부탁은 마지막 print 한 번뿐이에요.

이번에는 예제 2의 표를 직접 채워요. 책의 결과를 손으로 가리고 시작해 보세요.

실행한 곳item이 가리키는 글자 값새로 출력한 글
첫째 줄 뒤
둘째 줄 뒤
셋째 줄 뒤

대조 답: 이름이 가리키는 값은 세 행 모두 리본이에요. 새 출력은 차례로 없음 / 리본 / item이에요. 셋째 줄은 따옴표 안의 글을 보여 줄 뿐, item에 다시 대입하지 않아요.

실행한 곳item이 가리키는 글자 값화면 출력1실행 전(아직 이름 없어요)(빈 화면)2첫째 줄 뒤리본 ★(빈 화면)3둘째 줄 뒤리본리본 ★4셋째 줄 뒤리본리본 / item ★
그림 2-11추적표의 두 창 — 이름의 연결(item→리본)은 그대로이고 화면 출력만 한 줄씩 늘어요. / 는 줄 구분 표기이며 실제로는 두 줄 출력이에요.

내가 예측한 결과와 실제 결과가 달랐던 예제:

어디서 달라졌나요? 대입  따옴표  재대입  종류

다시 확인한 내용:

안 보고 직접 쓰기이름표를 내 손으로 달아요

앞쪽을 가리고 써 봐요. 아래 빈칸 틀의 번호·대괄호는 종이 연습용이에요. 실행기에는 완성한 코드만 넣어요.

연습 1. 값에 이름을 붙여요.

글자 값 ‘단추’를 item에 대입하고, 그 이름으로 값을 출력해요.

첫 줄: item ① "단추"

둘째 줄: print(②)

①  ②

연습 2. 이름은 그대로, 값은 다시.

count에 2를 대입한 뒤, 다시 7을 대입하고 마지막 값을 출력해요.

첫 줄: count = 2

둘째 줄: count = ③

셋째 줄: print(count)

③  예상 출력:

연습 3. 종류를 물어봐요.

글자 값 ‘12’를 label에 대입해요. 그 이름으로 찾은 값의 종류를 type으로 알아내고 print로 보여 주세요.

첫 줄:

둘째 줄:

말로 답하기. 상수 용도 이름을 대문자로 적으면 파이썬이 재대입을 막아 줄까요?

내 답과 이유:

직접 쓰기 대조 답

연습 1의 ①은 등호, ②는 따옴표 없는 item이에요.

main.py
item = "단추"print(item)
실행 결과
단추

연습 2의 ③은 7이에요. 마지막에 연결된 값이 나와요.

main.py
count = 2count = 7print(count)
실행 결과
7

연습 3은 종류를 묻는 type을 print 안에 넣어요.

main.py
label = "12"print(type(label))
실행 결과
<class 'str'>

말로 답하기의 답은 ‘아니요’예요. 대문자는 바꾸지 않기로 한 약속을 알리는 관례이지, 자동으로 막는 장치가 아니에요.

한 번 틀렸다면 그곳만 고쳐 실행해 봐요. 처음부터 몽땅 다시 쓸 필요는 없어요.

고친 곳:  실제 실행 확인: 완료 아직

시험에선 이렇게 나와요기출형 1문항
이 교재를 위한 창작 문항이에요. 실제 기출문제를 인용하거나 변형한 문항이 아니에요.

문제. 다음 파이썬 코드의 출력으로 알맞은 것은 무엇인가요?

tag = 3tag = "3"print(type(tag))
①3
②<class 'int'>
③<class 'str'>
④<class 'float'>

내 답:  마지막에 연결된 값의 종류:

정답먼저 풀고 눌러서 펼쳐 보세요
③

첫째 줄에서는 숫자 3에 이름을 연결했어요. 하지만 둘째 줄에서 글자 값 ‘3’으로 다시 연결했지요. 셋째 줄은 지금 tag가 가리키는 값의 종류를 물어요. 그래서 str이 나와요.

①은 값 출력과 종류 출력을 혼동한 답이에요. ②는 첫 대입만 보고 멈춘 답, ④는 소수점을 쓰는 수의 종류와 혼동한 답이에요.
실행 결과
<class 'str'>
1실행 전 · tag 없음2메모리3tag → 숫자 값 33메모리3"3"tag → "3" · 연결 다시4코드print(type(tag))3줄 · 종류를 물어봐요5출력<class'str'>출력tag = 3tag = "3"종류 물어보기print
그림 2-12시험 코드 추적 — tag는 마지막에 글자 값 "3"에 연결되어 종류는 str이에요. 재대입 장면은 두 값 칸을 따로 두었어요.
딱지 떼기 체크
다 했으면
딱지 떼기
도장
  • 변수는 값을 다시 쓰려고 붙이는 이름이라고 말할 수 있어요.
  • 이름표와 실제 값이 다르다는 것을 그림에서 짚을 수 있어요.
  • 대입은 오른쪽 값을 왼쪽 이름에 연결한다고 읽어요.
  • 대입만 하면 화면 출력은 없다는 것을 알아요.
  • 재대입 뒤에는 지금 연결된 값을 찾는다고 설명할 수 있어요.
  • 상수의 대문자는 ‘바꾸지 말자’는 관례임을 알아요.
  • 숫자 8과 글자 값 ‘8’을 type으로 구별할 수 있어요.
  • 직접 쓴 코드를 실제 실행기에 넣어 결과와 대조했어요.

아직 헷갈리는 곳 하나만 골라요. 따옴표면 예제 2, 값 변경이면 예제 3, 종류면 예제 5·6을 다시 보면 돼요.

오늘의 한 문장: 값은 로 다시 찾아 쓸 수 있어요.

다음 강에서는 숫자를 계산하고 종류도 바꾸어 볼 거예요. 오늘은 이름표만 단단히 붙이면 준비 끝이에요.

출처·저작 메모

  • 생활 비유·예제·그림·문항은 이 책을 위해 새로 만들었어요.
  • 개념 참고: Python 공식 문서, 대입문(https://docs.python.org/3/reference/simple_stmts.html#assignment-statements), 내장함수 type(https://docs.python.org/3/library/functions.html#type), 이름의 대소문자·식별자 규칙(https://docs.python.org/3/reference/lexical_analysis.html#identifiers), PEP 8 상수 이름 관례(https://peps.python.org/pep-0008/#constants). 문장·예제·그림은 전재하지 않았어요.
  • 외부 이미지·아이콘은 사용하지 않았어요. 그림은 기본 도형으로 새로 그렸어요.
dumok.net · 왕딱지 — 코딩 초보 딱지 떼기