Python에서 Mutable vs Immutable Objects (쉽게 설명)

발행: (2026년 1월 13일 오후 05:01 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

소개

이 글은 데이터 구조, 재귀, 백트래킹 작업 시 자주 혼동되는 파이썬의 핵심 개념을 설명합니다. 파이썬에서 객체는 내부 상태가 변할 수 있는지 여부에 따라 크게 두 종류로 나뉩니다:

  • Mutable 객체
  • Immutable 객체

이 구분을 이해하는 것은 올바르고 예측 가능한 파이썬 코드를 작성하는 데 매우 중요합니다.

Mutable 객체

Mutable 객체는 생성 후에도 내용이 변경될 수 있는 객체입니다. Mutable 객체를 수정하면:

  • 메모리 상의 동일한 객체가 업데이트됩니다.
  • 메모리 주소는 변하지 않습니다.

대표적인 mutable 타입으로는 list, set, dict 등이 있습니다.

a = [1, 2, 3]
a.append(4)
print(a)  # [1, 2, 3, 4]

위 예시에서 a는 여전히 같은 리스트를 가리키지만, 리스트의 내용이 제자리에서 변경되었습니다.

Immutable 객체

Immutable 객체는 생성 후 내용이 변경될 수 없는 객체입니다. 겉보기에 객체를 수정하는 연산을 수행하면 실제로는:

  • 새로운 객체가 생성됩니다.
  • 새로운 메모리 주소가 할당됩니다.

대표적인 immutable 타입으로는 int, float, str, tuple, frozenset 등이 있습니다.

x = 10
x = x + 1
print(x)  # 11

무슨 일이 일었는가

  • 정수 10 자체는 변경되지 않았습니다.
  • 새로운 정수 11이 생성되었습니다.
  • x는 이제 새로운 객체를 가리킵니다.

변이성의 영향

객체의 변이성은 파이썬 프로그래밍의 여러 측면에 영향을 미칩니다:

  • 함수 인자 – mutable 인자는 함수 내부에서 변경될 수 있어 호출자의 변수에 영향을 줍니다.
  • 재귀와 백트래킹 – immutable 객체는 상태 변화를 추론하기 쉽게 합니다.
  • 공유 참조 – 여러 변수가 같은 mutable 객체를 참조하면 예상치 못한 부작용이 발생할 수 있습니다.

예시: Mutable 인자

def add_item(lst):
    lst.append(100)

nums = [1, 2, 3]
add_item(nums)
print(nums)  # [1, 2, 3, 100]

리스트 nums가 함수 밖에서도 변경된 이유는 해당 리스트가 mutable이기 때문입니다.

요약

  • Mutable 객체(예: list, set, dict)는 생성 후에도 변경 가능하며 메모리 주소가 동일하게 유지됩니다.
  • Immutable 객체(예: int, float, str, tuple, frozenset)는 변경할 수 없으며, 연산 결과는 새로운 객체와 새로운 주소를 갖습니다.

mutable과 immutable의 구분을 염두에 두면 흔히 발생하는 버그를 예방하고 디버깅에 드는 시간을 크게 절감할 수 있습니다.

Back to Blog

관련 글

더 보기 »