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
'여러 가지 이야기 > 에러 모음' 카테고리의 다른 글
TypeError: 'TimeGrouper' object is not callable (0) | 2023.08.23 |
---|---|
ValueError: pattern contains no capture groups (0) | 2023.08.09 |
OverflowError: Python int too large to convert to C long (0) | 2023.08.07 |
TypeError: '<' not supported between instances of 'str' and 'int' (0) | 2023.08.07 |
TypeError: '<' not supported between instances of 'type' and 'type' (0) | 2023.08.07 |