본문 바로가기

Programming/Python

[파이썬 Python] 파이썬에서 해시가능(Hashable)의 의미와 불변객체와의 관계

 

해시 이미지 : 출처 위키피디아 '해시'

Hashing 해싱, 해시, 해쉬

해싱이란 많은 양의 데이터를 하나의 integer와 같이 작은 양의 데이터로 변환해주는 알고리즘입니다. 예를 들어, 10으로 나눈 나머지를 해시 알고리즘으로 채택한다면 모든 수를 1부터 9까지로 반복적으로 분류할 수 있습니다. 이런 해시 알고리즘을 사용하면 constant-time인 o(1)의 시간 복잡도 안에 자료를 찾을 수 있다는 장점이 있습니다. 이는 높은 성능을 요구하는 알고리즘과 자료구조에 있어서 매우 중요합니다.

 

Immutability 불변성, 불변 객체

불변 가능한 객체란, 인스턴스가 메모리를 할당받아 한 번 생성되고 나면 변하지 않는 것을 의미합니다. 불변형 객체는 변수와 객체 참조 간의 차이가 없습니다. 즉 변수의 값이 변할 때, 객체가 변합니다. 

불변형 객체의 예로는 정수 integer, 튜플(터플, tuple)이 있으며, 불변형 객체와 반대 개념인 가변형 객체의 예로는 list가 있습니다.

예를 들어 list a=[1,2,3]의 원소가 [1,2,5]로 바뀌어도 a의 객체 참조 주소는 변하지 않습니다. 

 

 

Hashable(해시 가능)과 Immutability(불변성)의 관계

해시 가능함과 불변성은 서로 연관이 있습니다. 왜냐하면 해시 알고리즘으로부터 얻은 hash key는 불변(immutable)으로 변하지 않아야 하기 때문입니다. 만약 해시 키(Hash Key)가 불변이 아니고 변할 수 있다면 해쉬 테이블 같은 자료 구조(data structure) 내에서 객체가 저장된 위치 또한 변하게 되는 것입니다. 따라서 hashing의 데이터를 빨리 찾으려는 초기 목적 자체가 해를 입게 됩니다.