본문 바로가기
1. 파이썬 시작/TIPS

파이썬 가변객체와 불변객체 분류와 이해

by 만다린망고 2021. 10. 6.
반응형

파이썬에서 객체는 type 함수를 적용했을 때 반환되는 값입니다. 아래와 같은 객체들이 있습니다. 

int, float, string, bool, unicode
list, tuple, dict, set

객체는 크게 둘로 나뉩니다. 가변객체와 불변객체입니다. 가변객체는 값을 바꿀 수 있는 객체이고, 불변객체는 값을 바꿀 수 없는 객체입니다. 

가변 객체(mutable object) : list, dict, set
불변 객체(immutable object) : int, float, string, bool, tuple

이런 질문을 할 수 있습니다. 정수도 값을 바꿀 수 있는데? a=3 으로 넣었다가 a=5를 넣으면 값이 바뀌지 않느냐는 의문입니다. 이런 혼동을 방지하기 위해 가변과 불변을 더 명확히 정의해봅시다. 

가변이라는 것은 id 가 변하지 않고 값을 바꿀 수 있는 것을 말합니다. id에 대한 이해가 필요합니다. 모든 객체는 세가지 특성을 갖습니다. 

- 값(value)
- 유형(type)
- 정체성(id)

예를들어 a=3을 정의해봅시다. 값은 3이고, 타입은 int이고, id는 아래와 같습니다. 

>>> a=3
>>> type(a)
<class 'int'>
>>> id(a)
140727555983072


a=5 로 바꾸면 id가 변합니다. 이건 값을 바꾼게 아니라, a를 다시 정의한 것입니다. 

>>> a=5
>>> id(a)
140727555983136


값을 바꾼다는 것이 무엇인지 예를 들어봅시다. 리스트를 하나 정의합시다. 

>>> L=[1,2,3]
>>> id(a)
2290636338048


값을 하나 바꿔봅시다. 여전히 id가 유지됨을 알 수 있습니다. 바로 이게 가변입니다. 

>>> L[2]=10
>>> id(a)
2290636338048
반응형

댓글