파이썬에서 모든 데이터는 객체(Object)로 취급되며, 이 객체들은 크게 두 가지로 나뉩니다.
- 변경 가능한 객체(Mutable Object)
- 변경 불가능한 객체(Immutable Object)
이 두 가지의 차이를 이해하는 것은 파이썬 프로그래밍의 기본이자, 코드에서 예기치 않은 오류를 방지하는 데 매우 중요합니다.
변경 가능한 객체(Mutable)란?
Mutable 객체는 생성된 후에도 내용을 자유롭게 수정할 수 있는 객체를 말합니다. 대표적인 예로 리스트(list), 셋(set), 딕셔너리(dict) 등이 있으며, 요소를 추가·삭제·변경하는 작업이 간편합니다.
예제 1: 리스트 요소 변경하기
list = ["Tutorials", "Point", "Pvt", "Ltd"] list[2] = 'Tutorix' list
출력 결과
['Tutorials', 'Point', 'Tutorix', 'Ltd']
인덱스 2에 해당하는 'Pvt'가 'Tutorix'로 성공적으로 변경된 것을 확인할 수 있습니다.
예제 2: 리스트 마지막 요소 변경하기
list = ['Car', 'Bike', 'Scooty', 'Bus', 'Metro'] list[4] = 'Bicycle' list
출력 결과
['Car', 'Bike', 'Scooty', 'Bus', 'Bicycle']
이처럼 리스트는 한 번 생성한 뒤에도 특정 위치의 값을 얼마든지 바꿀 수 있습니다.
변경 불가능한 객체(Immutable)란?
Immutable 객체는 한 번 생성되면 내용을 수정할 수 없는 객체입니다. 대표적으로 정수(int), 실수(float), 불린(bool), 문자열(str), 튜플(tuple), 유니코드 문자열 등이 여기에 해당합니다.
특히 튜플은 소괄호( )로 감싸서 정의하며, 리스트와 비슷해 보이지만 값 자체를 변경할 수 없다는 점이 큰 차이입니다. 값을 바꾸려면 기존 객체를 수정하는 것이 아니라 새로운 객체를 만들어야 하므로, 빈번한 변경에는 비효율적일 수 있습니다.
예제 1: 튜플 생성하기
tuple = ('1', '2', 'Python', 'Perl')
tuple출력 결과
('1', '2', 'Python', 'Perl')튜플을 생성하고 조회하는 것은 문제없이 동작합니다.
예제 2: 튜플 요소 변경 시도하기
tuple = ('1', '2', 'Python', 'Perl')
tuple[4] = '2019'
tuple출력 결과
TypeError Traceback (most recent call last)
in
1 tuple=('1','2','Python','Perl')
----> 2 tuple[4]='2019'
3 tuple
TypeError: 'tuple' object does not support item assignment위 출력 결과에서 볼 수 있듯이, 튜플의 요소를 변경하려고 하면 TypeError: 'tuple' object does not support item assignment 오류가 발생합니다. 즉, 튜플 객체는 생성 후 값을 변경하는 것이 허용되지 않습니다.
정리: Mutable vs Immutable 한눈에 보기
| 구분 | 변경 가능(Mutable) | 변경 불가능(Immutable) |
|---|---|---|
| 대표 타입 | list, set, dict | int, float, bool, str, tuple |
| 값 수정 | 가능 | 불가능 (오류 발생) |
| 변경 방식 | 객체 자체를 직접 수정 | 새로운 객체를 생성해야 함 |
어떤 타입이 mutable인지 immutable인지 정확히 알고 있으면, 함수에 인자를 전달할 때나 데이터 구조를 설계할 때 발생할 수 있는 부작용을 미리 예방할 수 있습니다.