파이썬 hash 함수
파이썬 언어도 내부적으로 hash라는 함수를 제공합니다. 근데 이건 우리가 방금 배운 해시 함수랑 조금 다른데요. 파이썬 해시 함수는 파라미터로 받은 값을 그냥 아무 정수로만 바꿔주는 함수입니다.
저희가 배웠던 해시 함수와는 달리 특정 범위 안에 있는 정수가 아니라 아무 정수로 바꿔주죠.
정수형, 소수형, 문자열 타입에 hash 함수를 호출했을 때 나오는 결과를 살펴보겠습니다.
# 정수 값
print(hash(12345)) # 12345
print(hash(12345)) # 12345
# 다른 정수 값
print(hash(12346)) # 12346
# 소수 값
print(hash(15.1234)) # 284541027336970255
print(hash(15.1234)) # 284541027336970255
# 다른 소수 값
print(hash(81.1234)) # 284541027336978513
# 문자열
print(hash("파이썬")) # -8002119629611903017
print(hash("파이썬")) # -8002119629611903017
# 다른 문자열
print(hash("자바")) # -8553573703343279427
이런식으로 같은 값을 넣으면 항상 같은 정수를 리턴해주는 함수입니다. 이 때 중요한 점은 hash 함수에 서로 다른 두 값을 파라미터로 넣었을 때 같은 정수가 리턴될 수 없다는 건데요.
그러니까 hash("파이썬")이 -8002119629611903017이 리턴됐으면, 다른 그 어떤 값을 파라미터로 넣어도 -8002119629611903017가 나올 수 없습니다. 데이터를 자신만의 고유한 정수 값으로 바꿔주는 함수인셈입니다.
지금까지는 해시 함수에 key를 정수형으로만 생각했잖아요? 다른 타입의 데이터들을 자신만의 고유한 정수 값으로 바꿀 수 있으면 이제 정수 뿐만 아니라 다른 자료형들도 key로 사용할 수 있습니다. 해시 테이블에 저장할 수 있는 종류의 데이터를 더 폭 넓게 늘릴 수 있다는 말이죠. 과제에서 해시 테이블을 직접 구현할 때 이 hash 함수를 사용해서 해시 테이블에 key가 문자열인 데이터를 저장할 건데요. 그 때 그냥 “아 문자열을 고유한 정수 값으로 바꿔주는구나”라고 이해하시면 됩니다!
hash 함수의 한계
여기서 조심해야 되는 게 하나 있는데요. 파이썬 hash 함수는 언어 자체적으로는 불변 타입 자료형에만 사용할 수 있습니다.
파이썬에서 여러분이 가장 많이 접해봤을 대표적인 불변 타입 자료형은:
- 불린형
- 정수형
- 소수형
- 튜플
- 문자열
이 정도가 있는데요. 이런 타입의 자료형만 hash 함수의 파라미터로 넘겨줄 수 있습니다.
출처 코드잇
'Algorithm > 자료구조' 카테고리의 다른 글
[해시 테이블] 해시 테이블 정리 (0) | 2023.08.03 |
---|---|
[링크드 리스트] 링크드 리스트 정리 (0) | 2023.08.03 |
[해시 테이블] 해시 함수 (0) | 2023.08.03 |
[링크드 리스트] 링크드 리스트 __str__ 메소드 (0) | 2023.07.31 |
[배열] 동적 배열 크기 줄이기 (0) | 2023.07.31 |