Python/Debugging

TypeError: 'tuple' object does not support item assignment / TypeError: unhashable type: 'list' 원인, 해결법

jimmy_AI 2022. 4. 28. 20:10
반응형

파이썬 튜플, 리스트 관련 TypeError 디버깅

파이썬 프로그래밍 중에 튜플, 리스트 자료형과 관련하여 발생가능한

대표적인 TypeError 두 가지에 대하여 원인과 대처법을 정리해보도록 하겠습니다.

 

 

TypeError: 'tuple' object does not support item assignment

튜플로 선언된 자료에 인덱싱을 통한 값 추가, 수정 등을 시도할 경우 발생하는 오류입니다.

t1 = (10, 20, 30)

t1[0] = 15 # TypeError: 'tuple' object does not support item assignment 발생

해당 오류가 발생한 경우, 인덱싱을 시도하려했던 자료의 type을 검사하여

혹시 튜플 자료형이 아니었는지에 대하여 확인해보시면 됩니다.

 

해결법은 리스트 등 수정 가능한 자료형으로 변환 후 값 추가, 수정을 재시도하시면 됩니다.

# 자료형 확인
t1 = (10, 20, 30)
print(type(t1)) # <class 'tuple'>

# 리스트 변환 후 수정
l1 = list(t1)
l1[0] = 15
print(l1) # [15, 20, 30]

 

 

TypeError: unhashable type: 'list'

리스트를 딕셔너리의 key로 사용하려 하거나 set 자료형의 원소로 취급하려는 경우에

발생할 수 있는 오류 메시지입니다.

# 두 선언 형태 모두 TypeError: unhashable type: 'list' 발생
d1 = {['a', 'b'] : 'c'}
s1 = set([['a', 'b'], 'c'])

이는 리스트가 가변 자료형이라서 발생하는 에러로

불변 자료형인 튜플 형태를 대신해서 사용해주시면 해결이 가능합니다.

# 두 선언 형태 모두 아래 형태로는 가능
d1 = {('a', 'b') : 'c'}
s1 = set([('a', 'b'), 'c'])