호기심 많은 분석가

[Python] TypeError: unhashable type: 'list' 본문

Coding/Machine Learning & Python

[Python] TypeError: unhashable type: 'list'

DA Hun 2021. 6. 5. 23:30

리스트 안의 리스트 중 unique 한 것만 남겨두기 위해서 set을 적용해 주었더니 아래와 같은 Error가 발생하였다. 무엇이 문제일까?

TypeError: unhashable type: 'list'

리스트 안의 str 같은 원소들의 경우 별문제가 없다. 그렇다면 list가 unhashable 하다는 것이 무슨 의미인가?


unhashable type: list

hashable

  • hashable이라는 것은 어떤 데이터를 hash 함수를 이용해서 hash값으로 변환할 수 있다는 것을 의미
    • hash는 어떤 특정 데이터에 대해서, 매우 유니크한 하나의 값을 가지게 된다.
    • 그런데 원래 데이터가 변한다면, 이 데이터가 변함에 따라서 해당 hash 값도 변하게 될 것
      • 따라서 hashable 하기 위해서는 immutable 해야 한다.

immutability

  • immutable 하다는 것은 데이터의 구조가 변경 불가임을 의미한다. 

자 이제 그렇다면 무엇이 문제인가? 바로 list는 mutable 한 원소라는 점이다.

  • 그래서 list를 immutable 한 tuple의 형태로 바꾸어 주면 해결
arr = [[1, 2], [3, 4], [1, 2]]
tuple_arr = [tuple(i) for i in arr]
print(set(tuple_arr)) # {(1, 2), (3, 4)}

unique_arr = [list(j) in j in set(tuple_arr)]

 

이렇게 해결하면 우리가 처음에 원하는 작업을 실행해 줄 수 있다. :)