파이썬에는 상수가 존재하지 않기 때문에, 좌변을 변수라고 부르는 대신 name, identifier등의 표현을 사용한다. 본 문서에서는 파이썬의 데이터형에 대해서 다룬다.
최종수정일 : 2023.10.02
파이썬의 모든 데이터는 아래와 같이 세 가지를 갖는 객체이다.
identity
메모리상에서 객체의 주소s
type
메모리에 적재된 값을 해석할 타입
value
메모리에 적재된 값
데이터 타입 중 메모리에 적재된 이후 값을 변경할 수 있는 객체를 가변객체(mutable), 값을 변경할 수 없는 객체를 불변객체(immutable)라고 한다.
가변객체에 대한 참조를 가지고 있는 불변 컨테이너는 불변인 것으로 여겨질 수 있다.
객체는 명시적으로 파괴되지 않으며, 참조되지 않을 때(unreachable) 가비지 콜렉션 기능에 의해 메모리에서 제거된다.
데이터 타입에는 우리가 이미 알고 있는 다양한 타입이 있다. 아래에는 데이터 타입에 관한 내용 중 일부에 대해 내부적인 구조를 상세하게 다룬다.
참조글 :
딕셔너리는 key-value를 매칭하는 매핑 형태의 자료구조로 collections.MutableMapping에 dict의 인터페이스가 구현되어 있다.
import collections #python 3.9 a_dict = {} isinstance(a_dict, collections.MutableMapping) # result : True
내부 구조와 관련하여 아래 두 가지 개념을 이해할 필요가 있다.
pre-hashing
: x, y에 대해 해시 함수를 취했을 때 h(x) == h(y)이면 x == y 이다.
hashing
: 위와 다른 관점으로, 가변 길이의 데이터를 한정된 길이 내의 데이터로 줄이는 것이 주안점이다.
딕셔너리는 내부적으로 보았을 때 해시테이블이기 때문에, hashable한 객체여야 한다. 대부분의 immutable 객체는 hashable이며, 모든 mutable 객체는 unhashable이다.
[before python 3.6]
[after python 3.6]
간단하게 dictionary 객체는 찾는 값에 빠르게 접근하기 위해 해시를 사용하며, 하나의 원소는 hash, key, value를 갖는다. 3.6이후부터 해시테이블 외에 indices가 추가되어 삽입한 순서를 기억할 수 있게 되었다.