본문 바로가기
카테고리 없음

Python mutable, Immutable

by am6:00 2023. 2. 14.

1. Mutable과 Immutable의 의미

mutable과 immutable 에 대해 영단어 검색을 해보면 각각 뜻이 mutable = 변하기 쉬운, immutable = 불변 이라는 뜻을 가지고 있습니다. 단어의 의미처럼 파이썬에는 변경할수 있거나 변경할 수 없는 객체(list, dict, int, str 등)들로 구성되어 있습니다. 

변수를 할당하고 변수의 값을 계속 바꿀수 있는데 왜 불변이라는 것인지 이해가 안될수도 있습니다. 그런데 컴퓨터에서는 변수의 값을 수정할때 변수가 할당된 주소가 변경되면 immutable 하다 라고 이야기 하고 주소값은 그대로 내부 값(주소값)만 변경된다면 mutable 하다고 합니다.

 

2. Mutable 한 객체들

파이썬에서 mutable(변경 가능한) 객체들에는 list, dict 두가지가 있습니다. 이해가 잘 안될땐 그림을 그려보면 쉬워집니다. 우선, list 변수를 하나 메모리에 할당해보겠습니다.

test_list: List[str] = ['hello', 'world']

기본값은 그림과 같이 할당됩니다. 그리고 test_list[0] 의 값을 변경해보겠습니다.

test_list[0] = "python"

0번 인덱스가 가리키고 있던 hello 문자가 저장되어있는 주소로 가는 화살표가 취소되고 python 문자가 저장되어있는 주소로 가는 화살표가 새로 생겼습니다. 그런데 test_list 리스트의 시작 주소는 여전히 동일한 곳을 가리키고 있습니다. 시작 주소는 동일하면서 내부 값만 변경되어 mutable 하다고 할 수 있습니다.

3. Immutable한 객체들

파이썬에서 imumtable(불변) 객체들에는 int, float, str, tuple 네가지가 있습니다.

num: int = 100
num = 101

대표로 int 객체로 예를 들어보겠습니다. num에 초기값으로 100을 할당하고 2번째 라인에서 101로 변경해보았습니다.

num 변수의 시작 주소는 100이라는 숫자가 저장된 주소를 가리키고 있었는데, 101로 변경되면서 초기 주소값이 지워지고 새로운 주소값으로 할당되었습니다. 값을 변경할 때마다 새로운 주소값이 할당되므로 immutable 하다고 할 수 있습니다.