Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 불변(Immutable)이란? 변경 가능한 타입과 불가능한 타입 완벽 정리

파이썬에서 모든 데이터는 객체(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, dictint, float, bool, str, tuple
값 수정가능불가능 (오류 발생)
변경 방식객체 자체를 직접 수정새로운 객체를 생성해야 함

어떤 타입이 mutable인지 immutable인지 정확히 알고 있으면, 함수에 인자를 전달할 때나 데이터 구조를 설계할 때 발생할 수 있는 부작용을 미리 예방할 수 있습니다.