반응형

객체가 지닌 값의 수정이 불가능한 객체를 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)

 

 

 

반응형