본문 바로가기
Language

파이썬 mutable과 immutable 변수들

by markbyun 2025. 4. 19.

파이썬을 배울 때 꼭 이해해야 할 중요한 개념 중 하나는 가변(mutable) 데이터 타입과 불변(immutable) 데이터 타입의 차이입니다. 이 개념을 쉽게 설명하기 위해, 예제를 활용해 단계별로 풀어보겠습니다!

1. "가변"과 "불변"이란 무엇인가요?

  • 가변(mutable): 객체가 생성된 후에도 수정할 수 있습니다.
  • 불변(immutable): 객체가 생성된 후에는 수정할 수 없습니다.

이렇게 생각해보세요:

타입 실생활 비유
Mutable 화이트보드: 쓰고 지우는 것이 가능
Immutable 출력한 사진: 한번 인쇄되면 수정 불가능

 

2. Immutable 데이터 타입

이들은 생성된 후에는 변경할 수 없는 데이터 타입입니다.

Immutable 타입 예제:

  • int
  • float
  • bool
  • str
  • tuple
  • frozenset

예제 1: 정수 (int)

a = 5
print(id(a))  # a의 메모리 주소

a = a + 1
print(a)      # 6
print(id(a))  # 다른 메모리 주소!
 

'a'에 1을 더했을 뿐인데, 파이썬은 결과를 위해 메모리에서 새로운 객체를 생성했습니다.

핵심 포인트: 정수는 제자리에서 변경할 수 없습니다. "변경"하는 것처럼 보이지만, 사실 새로운 정수 객체를 생성하는 것입니다.

 

예제 2: 문자열 (str)

s = "hello"
print(id(s))

s = s + " world"
print(s)        # "hello world"
print(id(s))    # 메모리 주소 변경됨

문자열을 수정한 것처럼 보이지만, 사실 파이썬은 새로운 문자열을 만들었습니다.

3. Mutable 데이터 타입

이들은 새로운 객체를 생성하지 않고 변경할 수 있는 데이터 타입입니다..

Mutable 타입 예제:

  • list
  • dict
  • set
  • bytearray
  • Custom objects (most of them)

예제 3: 리스트 (list)

my_list = [1, 2, 3]
print(id(my_list))

my_list.append(4)
print(my_list)     # [1, 2, 3, 4]
print(id(my_list)) # 같은 메모리 주소!

리스트에 항목을 추가했는데 메모리 주소가 변경되지 않았습니다. 이는 동일한 객체가 제자리에서 업데이트되었음을 의미합니다.

 

예제 4: 딕셔너리 (dict)

my_dict = {"name": "Alice"}
print(id(my_dict))

my_dict["age"] = 30
print(my_dict)      # {'name': 'Alice', 'age': 30}
print(id(my_dict))  # 같은 메모리 주소

리스트처럼, 딕셔너리도 제자리에서 변경할 수 있습니다.

4. 시각적 설명

이것을 시각화하는 데 도움이 되는 간단한 다이어그램입니다:

5. 이 개념이 중요한 이유

가변성(mutability)을 이해하면:

  • 데이터를 함수에 전달할 때 예상치 못한 버그를 피할 수 있습니다.
  • 파이썬의 데이터 타입을 더 효율적으로 사용할 수 있습니다.
  • 파이썬이 메모리와 성능을 어떻게 처리하는지 이해할 수 있습니다.