본문 바로가기

프로그래밍 언어/Python

[Python 변수] mutable과 immutable의 차이


[Python 변수] mutable과 immutable의 차이


변수

변수는 객체를 가리킨다.

$$ num = 10 $$

컴퓨터 메모리에 10이라는 값이 저장되고 num은 10이 저장된 메모리의 위치를 가리킨다.

10이라는 정수형 객체를 num이라는 변수가 가리키고 있는 것이다.


mutable, immutable

mutable은 값이 변한다는 뜻이고, immutable은 값이 변하지 않는다는 의미이다. 자료형마다 특징이 다른데 코드를 통해 알아보도록 하자.

- 숫자형 (Number) : immutable


- 문자열 (String) : immutable


- 리스트 (List) : mutable


- 튜플 (Tuple) : immutable


- 딕셔너리 (Dictionary) : mutable


숫자, 문자열, 튜플은 변경이 불가능하고 리스트와 딕셔너리는 변경이 가능하다. 위 코드의 $y=x$부분에서 y와 x가 같은 주소 값을 가리키게 되는데, 리스트의 [:]나 deepcopy 함수를 이용하면 같은 객체를 공유하지 않도록 사용 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# copy 모듈 import
import copy
 
= [1,2]
# x 변수가 저장하고 있는 주소 값 대입
= x
# x와 z가 같은 객체를 공유하지 않는다.(리스트만 가능)
= x[:]
# deepcopy를 이용하면 x와 cpy가 같은 객체를 공유하지 않는다.
dcpy = copy.deepcopy(x)
 
print id(x)
print id(y)
print id(z)
print id(dcpy)
cs

1
2
3
4
35300696
35300696
35299496
35302536
cs


정리

immutable, mutable 속성은 매우 중요하다. 이 속성에 따라 변수가 함수의 매개변수로 전달될 때 원래 입력 변수값이 변경되는지 안되는지 결정된다. Call-By-Value, Call-By-Reference와 동일한 개념이다. 이해가 되지 않으면 직접 코딩해보고 차이점을 인지해야 한다.