파이썬을 배울 때 꼭 이해해야 할 중요한 개념 중 하나는 가변(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)을 이해하면:
- 데이터를 함수에 전달할 때 예상치 못한 버그를 피할 수 있습니다.
- 파이썬의 데이터 타입을 더 효율적으로 사용할 수 있습니다.
- 파이썬이 메모리와 성능을 어떻게 처리하는지 이해할 수 있습니다.
'Language' 카테고리의 다른 글
Python Class 문법 완벽 가이드 (0) | 2025.04.27 |
---|---|
파이썬 초보를 위한 리스트와 NumPy Array 차이 쉽게 이해하기 (0) | 2025.04.23 |
파이썬 'global'과 'nonlocal' 키워드 설명 및 예제 (0) | 2025.04.19 |
Python map() 함수의 개념과 딥러닝 머신러닝 분야 활용법 (0) | 2025.04.19 |
Python Lambda() 함수: 생성 이유, 유익함, 그리고 DL/ML 개발에서의 활용 (0) | 2025.04.19 |