본문 바로가기
파이썬/통계분석

[파이썬 강의] 36. 가변객체와 불변객체 (객체의 세 특성)

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

객체라는 말이 등장하는데요. 자료형과 자료구조를 포함하는 말이 객체입니다. 파이썬에선 모든 것이 객체인데요. 나중에 더 자세히 다루겠습니다. 

우리는 파이썬 제공 자료형인 숫자형,문자열,논리형과 자료구조인 리스트,튜플,집합,딕셔너리를 배운상태입니다. 

어떤 자료구조는 원소를 변경할 수 있었고, 어떤 자료구조는 변경할 수 없었습니다. 변경한다는 것은 수정, 삭제, 추가를 의미합니다. 

예를들어 리스트는 원소의 변경이 가능했지만 튜플은 그렇지 않았습니다. 문자열도 원소의 변경이 불가능합니다. 

이런 의문이 생길 수 있습니다. 숫자형은 변경이 가능할까?

결론부터 말씀드리면 불가능합니다. 아니 이렇게 변경하면 되는거 아니야? 라고 생각하실 수도 있어요. 아래와 같이요. 

>>> a=3
>>> a
3
>>> a=5


이건 변경이 아니라 '재정의'입니다. 변경을 더 정확히 이해하려면 객체의 세가지 특성을 알아야 합니다. 객체는 아래와 같은 세가지 특성을 갖습니다. 

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

리스트를 하나 정의해봅시다. 

>>> L=[1,2,3]


값은 [1,2,3]입니다. 유형은 type함수의 결과인 list입니다. 정체성은 id함수를 적용하면 됩니다. 

>>> id(L)
2290667690048


id 함수의 반환값은 '고유주소'값입니다. 우리가 정의한 리스트는 메모리 어딘가에 저장되어 있을텐데 그곳의 주소입니다. 변경한다는 것은 유형과 정체성을 유지한 채로 값만 바꾸는 것을 의미합니다. 

리스트에서 한 값을 바꿔봅시다. 

>>> L[0]=100
>>> L
[100, 2, 3]


그리고 주소를 확인합시다. 

>>> id(L)
2290667690048


변하지 않았습니다. 이번에는 정수를 하나 정의합시다. 

>>> a=3
>>> id(a)
140727555983072


5로 바꿔봅시다. 

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


주소가 바뀌었죠? 변경이 아니라 '재정의'이기 때문입니다. 

자료형과 자료구조들은 변경가능여부에 따라 아래와 같이 가변객체와 불변객체로 나뉩니다. 

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

반응형

댓글