본문 바로가기
Python

[Python] immutable vs mutable 객체의 차이

by 방준이 2021. 10. 19.
반응형

객체가 지닌 값의 수정이 불가능한 객체를 immutable 객체라 하고 대표적으로 튜플과 문자열이 있다. 반면에 객체가 지닌 값의 수정이 가능한 객체를 mutable 객체라고 한다. 예로는 리스트와 딕셔너리가 있다. 이를 확인해 볼 수 있는 예제를 살펴보자. 

 

immutable 객체

>> r = [1, 2, 3]
>> id(r)
1753454201600

>> r += [4, 5, 6]
>> id(r)
1753454201600

 

이처럼 리스트에 다른 값들을 추가시켜도 주소가 바뀌지 않았음을 알 수 있다.  즉 r (리스트) 원본은 유지가 되고 값을 추가시킬 수 있음을 의미한다.  그렇다면 mutable 객체를 살펴보자

 

mutable 객체

>> t = (1, 2, 3)
>> id(t)
1753454302080

>> t += (4, 5, 6)
>> id(t)
1753453335872

반면에 튜플에 값을 추가하면 주소가 바뀌었음을 알 수 있다. 즉 새로운 튜플이 만들어졌음을 의미한다. 처음에 실행했던 t와 연산 후 t는 다른 튜플이라는 것이다. 이러한 객체들의 특성때문에 객체를 사용하고자 한다면 객체의 특성을 잘 파악하고 사용하는 것이 중요하다.

 

 

예제

>> def f(m, n):
        m += n
>> r = [1, 2, 3]
>> f(r, [4, 5, 6])
>> r
[1, 2, 3, 4, 5, 6]

앞에서도 살펴봤듯이 리스트의 경우 값의 수정이 가능하고 원본 리스트에 값을 추가하므로 함수내에서 작업을 한 것이 그대로 반영된 것을 확인할 수가 있다. 그렇다면 튜플을 통해서 immutable 객체들은 어떤지 살펴보자.

 

 

>> def f2(m, n):
       m += n

    
>> t = (1, 2, 3)
>> f2(t, (4, 5, 6))
>> t
(1, 2, 3)

 

튜플은 immutable 객체이다. 함수 내에서 연산을 진행하면서 새로운 튜플이 만들어진다. 따라서 t (튜플) 원본의 값에는 변함이 없는것이다. 다시 한번 정리하면 객체의 종류에는 immutable과 mutable 2가지가 있다. immutable에는 튜플과 문자열이 있으며 수정이 불가능하기 때문에 객체를 통해 연산을 진행하게 될 경우 새로운 객체가 생성이 된다. 반면 mutable 객체에는 리스트와 딕셔너리가 있다. 이는 지닌 값을 수정할 수 있기 때문에 연산 후에도 주소가 변하지 않는다.

 

 

 

 

 

참고자료


열혈 파이썬 중급편 

http://www.yes24.com/Product/Goods/81519650?OzSrank=1)

 

 

 

반응형

'Python' 카테고리의 다른 글

[Python3] dict의 다양한 생성방법과 zip() 함수  (0) 2021.02.10
[Python3] 문자열 관련 함수 총정리!  (0) 2021.02.09
[Python] 비트 연산  (2) 2021.02.06
[Python] 딕셔너리 모듈  (0) 2020.12.31
[Python] map & filter  (0) 2020.08.14