[Python] Mutable, Immutable

jake·2022년 10월 7일
0

python

목록 보기
17/20

1. Mutable, Immutable ?

파이썬에는 객체의 종류가 두가지가 있다.
mutable : 변경 가능한 객체
immutable : 변경 불가능한 객체

mutable 객체로는 set, list, dictionary가 있고 immutable 객체로는 int, float, tuple, str, bool이 있다.

파이썬에서는 immutable 객체의 값이 같은 경우에 변수에 상관없이 동일한 곳을 참조한다.

a=1
b=1

print(id(a)) # 2513421205744
print(id(b)) # 2513421205744

a와 b는 변수명이 다르지만 서로 같은 값(1)을 가리키므로 id를 출력했을 때 1이 존재하는 메모리 값을 출력한다.

 


Mutable

mutable 객체는 같은 값을 가지더라도 모든 객체를 각각 생성해서 참조하므로 참조하는 메모리 값이 다르다.

a=[1,2,3]
b=[1,2,3]

print(id(a)) # 1479064022464
print(id(b)) # 1479063988992

a와 b는 똑같이 같은 값을 갖고 있지만 출력하는 id값이 다르다.
변수 a가 고유의 리스트 [1,2,3]이 있는 메모리값을 가지고 있고 마찬가지로 변수 b가 고유의 리스트 [1,2,3]이 있는 메로리값을 가지고 있다.
따라서 a가 가지고 있는 리스트와 b가 가지고 있는 리스트는 겉보기에는 똑같아도 다른 값이다.

 

값을 한번 바꿔서 출력하는 메모리 값을 비교해보자.

a=[1,2,3]
print(id(a)) # 2546767228352

a.append(4)
print(id(a)) # 2546767228352

변수 a가 리스트를 가리키고 고유의 리스트 메모리 값을 출력했다.
리스트에 변수를 추가하여도 고유의 메모리 값은 유지되기 때문에 이전과 똑같은 메모리 값을 출력했다.

 


Immutable

immutable 객체는 같은 값을 가지면 똑같은 값을 참조한 것으로 간주한다.

a=1
b=1

print(id(a)) # 2194280808688
print(id(b)) # 2194280808688

a와 b는 같은 값을 갖고 있으므로 똑같은 메모리 값을 가진다.

 


a=1
print(id(a)) # 2365842587888

a += 1
print(id(a)) # 2365842587920

처음에는 a가 1을 가지고 있으므로 메모리에 존재하는 1의 값을 반환 하였고, a가 2로 변경된 후 메모리에 존재하는 2의 값을 출력하였다.


mutable의 경우 같은 값을 가지고 있더라도 고유의 메모리 값을 가지고 있는 반면 immutable의 경우 같은 값을 가지고 있어야만 똑같은 메모리 값을 가지므로 다른 값을 가지고 있다면 당연히 다른 메모리 값을 가진다.

mutable 객체의 경우 값을 변경하는 경우가 잦다보니 값을 생성하면 고유의 메모리 값을 할당하고 immutable의 경우 값을 변경하는 경우보다는 참조하는 경우가 많아 고유의 값을 할당하기 보다는 이미 메모리에 존재하는 값을 참조한다.

0개의 댓글