한양과학기술고등학교

에듀테크 프로젝트 대시보드

변수와 자료형

variable dynamic typing type() mutable

파이썬의 변수는 값을 담는 상자가 아니라 객체를 가리키는 이름표입니다.

1. 할당과 이름 규칙

= 로 이름에 객체를 묶습니다(binding). 선언 키워드는 없습니다.

x = 10
name = "파이썬"
pi = 3.14

# 여러 개 한 번에
a, b, c = 1, 2, 3
a = b = 0            # 같은 객체를 세 이름이 참조

# 스왑 (임시변수 불필요)
a, b = b, a

# 언패킹 + 나머지 모으기
first, *rest = [1, 2, 3, 4]   # first=1, rest=[2, 3, 4]
이름 규칙
  • 문자·숫자·_ 만 사용, 숫자로 시작 불가
  • 대소문자 구분 (Age ≠ age)
  • 관례: 변수·함수는 snake_case, 상수는 UPPER_CASE, 클래스는 PascalCase
  • 예약어(if, class, lambda …)와 내장함수 이름(list, sum)은 피하기

2. 동적 타이핑

타입은 값(객체)에 붙어 있고 이름에는 붙지 않습니다. 같은 이름에 다른 타입을 다시 넣을 수 있습니다.

v = 42
print(type(v))        # => <class 'int'>
v = "이제 문자열"
print(type(v))        # => <class 'str'>

# 두 이름이 같은 객체인지 확인
a = [1, 2]
b = a
print(a is b)         # => True  (id가 같음)
print(id(a) == id(b)) # => True

3. 기본 내장 자료형

타입예시분류
int42, -7, 10_000숫자 · 불변
float3.14, 2e10숫자 · 불변
boolTrue, False숫자 · 불변
str"hi", '한글'시퀀스 · 불변
list[1, 2, 3]시퀀스 · 가변
tuple(1, 2, 3)시퀀스 · 불변
dict{"a": 1}매핑 · 가변
set{1, 2, 3}집합 · 가변
NoneTypeNone단일값

4. 가변(mutable) vs 불변(immutable)

불변 객체는 값을 바꿀 수 없어 새 객체를 만듭니다. 가변 객체는 제자리에서 수정됩니다.

s = "abc"
# s[0] = "A"   # TypeError: 'str' object does not support item assignment
s = "A" + s[1:]   # 새 문자열 생성

lst = [1, 2, 3]
lst[0] = 99        # OK — 같은 리스트를 수정
lst.append(4)
함정 — 기본 인자와 공유 참조
  • 가변 객체를 함수 기본값으로 쓰면 호출 간에 공유됩니다 → def f(x, acc=[]) 금지
  • b = a 는 복사가 아니라 같은 객체를 가리킵니다 → 복사는 a.copy() 또는 copy.deepcopy()

5. None 과 del

result = None          # "값 없음"을 명시
if result is None:
    result = compute()

x = 10
del x                  # 이름 바인딩 제거
# print(x)             # NameError
"명시적인 것이 암시적인 것보다 낫다 (Explicit is better than implicit)"