hhkb.dev

BLOG

2025-12-14 / 파이썬기초 · 01

가변 객체와 불변 객체

1. 파이썬의 모든 것은 '객체'다

파이썬에서 변수는 값을 담는 상자라기보다, 객체를 가리키는 이름표에 가깝다. 이 개념을 이해해야 참조와 메모리 동작이 자연스럽게 보인다.

a = [1, 2, 3] 
b = a          # b도 같은 [1, 2, 3] 객체를 가리킴
a.append(4)
print(b)       # [1, 2, 3, 4] -> b도 영향을 받음!

2. 가변 객체 (Mutable)

가변 객체는 생성된 뒤에도 내부 상태를 바꿀 수 있는 객체다.

  • 종류: list, dict, set, 사용자 정의 클래스 등
  • 특징:
    • 값을 바꿔도 메모리 주소(id())는 그대로인 경우가 많다.
    • 함수 기본 인자로 둘 때는 주의해야 한다. def foo(l=[]) 같은 코드가 대표적인 함정이다.

3. 불변 객체 (Immutable)

불변 객체는 한 번 만들어지면 내부 상태를 직접 바꿀 수 없는 객체다.

  • 종류: int, float, str, tuple
  • 특징:
    • 값을 바꾸는 것처럼 보여도 실제로는 새 객체를 만들어 다시 할당한다.
    • 해시 가능하므로 딕셔너리 키나 집합 요소로 쓸 수 있다.

4. is==의 차이

이 차이를 이해하면 가변 객체와 참조 문제가 훨씬 덜 헷갈린다.

  • ==: 값이 같은지 비교한다.
  • is: 같은 객체를 가리키는지, 즉 참조가 같은지 비교한다.
a = [1, 2, 3]
b = [1, 2, 3]

print(a == b) # True (내용물은 같음)
print(a is b) # False (서로 다른 주소에 생성된 별개의 리스트)