본문 바로가기
여러 가지 이야기/에러 모음

TypeError: unhashable type: 'set'

by 김판다t 2023. 8. 7.

TypeError: unhashable type: 'set'

 

번역 : 해시 할 수 없는 자료형: 'set'

 

에러 발생 예시
my_dict = {set(('A', 'B')): '1'} # TypeError: unhashable type: 'set'

위 코드에서 set(('A', 'B'))는 집합 자료형이므로, 변경 가능한(mutable) 객체이기에 해시 할 수 없어 에러가 발생합니다.

 

에러 원인

 

파이썬에서 딕셔너리의 키는 반드시 변경 불가능한 객체여야 합니다. 변경 가능한 객체(예: 집합, 리스트, 딕셔너리)는 내부 상태가 변할 수 있으므로 해시값이 변할 가능성이 있어 키로 사용할 수 없습니다.

 

해결 방법

 

집합(set)을 변경 불가능한 객체로 변환하면 해결됩니다.

  • frozenset: 집합 자료형의 변경 불가능한 형태이며 해시 가능.
  • tuple: 순서가 중요한 경우 사용할 수 있는 변경 불가능한 자료형.

수정된 코드

# frozenset 사용
# frozenset은 변경할 수 없는 집합으로, 딕셔너리의 키로 사용할 수 있습니다.
my_dict = {frozenset(('A', 'B')): '1'}  
print(my_dict)  # 출력: {frozenset({'A', 'B'}): '1'}

# 튜플 사용
# 튜플 또한 불변 객체로, 딕셔너리의 키로 사용할 수 있습니다.
my_dict = {('A', 'B'): '1'}  
print(my_dict)  # 출력: {('A', 'B'): '1'}

 

unhashble에 대해 더 알고 싶다면 다음 포스팅을 참고하세요.

https://kimpanda.tistory.com/289


 

유튜브에서 판다스 강의 중입니다.

https://www.youtube.com/@KimPandas