Python/Debugging

TypeError: 'str' object does not support item assignment 해결법

jimmy_AI 2022. 10. 26. 16:55
반응형

개요

다음과 같은 문자열 a가 있다고 가정해보겠습니다.

a = 'abcde'

 

a의 3번 인덱스 위치의 'd'를 'g'로 바꾸려고 시도해보려는데,

다음과 같이 에러가 발생하였습니다.

a[3] = 'g'
# TypeError: 'str' object does not support item assignment

 

 

원인

자료형 종류에는 수정이 가능한 객체인 mutable 타입(리스트, 딕셔너리 등)이 있고,

수정이 불가능한 객체인 immutable 타입(튜플, 문자열 등)이 있는데

문자열은 immutable 자료형이라서 위와 같이 인덱싱(혹은 슬라이싱)을 통한

값 수정이 불가능한 것입니다.

 

반응형

 

해결 방법

1. 문자열 수동 할당

문자열 덧셈 연산으로 이어 붙이기가 되는 점을 이용하여 재할당을 해주는 방법입니다.

다만, 이 방법은 값을 수정할 때 마다, 문자열 길이 N에 대하여 O(N)의 시간 복잡도가 소요됩니다.

# 3번 인덱스의 문자를 'g'로 변경하는 예시(O(N))
a = a[:3] + 'g' + a[4:]

print(a) # abcge

 

 

2. 리스트로 변환하여 수정

잦은 수정이 필요한 경우, mutable 타입 객체인 리스트로 변환해둔 뒤 수정을 진행하면

값 변경 시에 O(1)의 시간복잡도가 소요되므로 훨씬 유리합니다.

a = 'abcde'
a = list(a) # 문자열 -> 리스트로 변환 ['a', 'b', 'c', 'd', 'e']

a[3] = 'g' # 값 변경(O(1))

a = ''.join(a) # 리스트 -> 문자열로 재변환
print(a) # abcge