728x90
TypeError: unhashable type: 'list'
오류는 리스트 객체를 set이나 dict의 키로 사용하려고 할 때 발생합니다. 리스트는 가변(mutable) 객체이기 때문에 해시 불가능(unhashable)하며, 해시 기반 자료구조에서 키로 사용할 수 없습니다.
딕셔너리의 키나 집합(set)의 원소로 사용되는 객체는 반드시 불변(immutable)이어야 하며, 리스트는 내부 요소가 바뀔 수 있어 해시 값을 보장할 수 없습니다.
● 오류 발생 예시
my_dict = {}
key = [1, 2, 3]
my_dict[key] = "value"
위 코드에서 리스트 key
는 가변 객체이므로 딕셔너리의 키로 사용할 수 없어 오류가 발생합니다.
● 주요 원인
- 리스트를 딕셔너리의 키로 사용
- 리스트를 set의 원소로 추가 시도
- 가변 객체를 해시 기반 자료구조에 사용
● 해결 방법
- 리스트 대신 튜플(tuple)을 사용 (튜플은 불변이므로 키로 사용 가능)
- 딕셔너리 키, 집합 원소 등에는 항상 불변 자료형 사용
- 리스트가 꼭 필요한 경우 문자열 등으로 변환하여 사용
● 예시 코드 (정상 처리)
my_dict = {}
key = (1, 2, 3) # 튜플 사용
my_dict[key] = "value"
print(my_dict)
● 결론
파이썬에서 딕셔너리나 집합 등 해시 기반 자료구조를 사용할 때는 키 또는 원소가 불변 객체여야 합니다. list
는 가변 객체이므로 이러한 용도로는 사용할 수 없으며, tuple
등으로 대체하는 것이 일반적인 해결 방법입니다.
728x90