728x90
TypeError: unhashable type: 'list'
오류는 리스트를 딕셔너리의 키나 set의 원소로 사용할 때 발생하는 오류입니다. 이는 리스트가 변경 가능한 자료형이기 때문에 해시값을 가질 수 없기 때문입니다.
해시 기반 자료구조(dict, set 등)는 내부적으로 객체의 해시값을 기반으로 동작하며, 이때 키로 사용되는 객체는 해시 가능해야 하고 변경 불가능해야 합니다. 리스트는 이러한 조건을 만족하지 않아 오류가 발생합니다.
● 오류 발생 예시
some_set = set()
some_set.add([1, 2, 3])
위 코드에서 set
의 원소로 리스트를 추가하려고 했기 때문에 TypeError
가 발생합니다.
● 주요 원인
- 딕셔너리 키로 리스트를 사용
- set에 리스트 추가
- 가변 객체를 해시가 필요한 위치에 사용
● 해결 방법
- 리스트 대신 튜플을 사용하여 키나 원소 지정
- 가변 자료형은 해시 불가능하므로 변환 처리 필요
- 데이터 구조 설계 시 불변 객체 사용을 우선 고려
● 예시 코드 (정상 처리)
some_set = set()
some_set.add((1, 2, 3)) # 튜플은 해시 가능
● 결론
파이썬에서는 딕셔너리 키나 set 원소로 사용할 경우, 반드시 변경 불가능한 객체를 사용해야 합니다. 리스트는 구조상 해시가 불가능하므로 tuple
이나 frozenset
등으로 변경하여 사용해야 오류를 방지할 수 있습니다.
728x90
'프로그래밍언어 > 파이썬[Error]' 카테고리의 다른 글
[파이썬][Error] 117. KeyError - 'non_existing_column' (0) | 2025.06.02 |
---|---|
[파이썬][Error] 116. ValueError - too many values to unpack (expected 2) (0) | 2025.06.02 |
[파이썬][Error] 114. TypeError - unhashable type: 'list' (0) | 2025.06.01 |
[파이썬][Error] 113. NameError - name 'xrange' is not defined (0) | 2025.06.01 |
[파이썬][Error] 112. ValueError - invalid literal for int() with base 10: 'abc' (0) | 2025.06.01 |