불변성과 문자열 수정

  데이터 타입
가변(mutable) list, set, dict
불변(immutable) int, float, bool, tuple, string, unicode

코어 데이터 타입 분류

가변(mutable) : list, set, dict
불변(immutable) : 숫자, bool, tuple, 문자열

불변성(immutable)

파이썬에서는 문자열은 변경할 수 없다. 다시 말해 문자열은 생성된 위치에서 변경될 수 없다. 이를 불변성이라고 하고 이 때문에 모든 문자열 연산은 새로운 문자열을 생성하도록 정의되어 있다.
불변(immutable)객체의 값은 절대 덮어쓸 수 없다.

a = "python"

print(a[0])
#--==>> p
a[0] = "P"
#--==>> 'str' object does not support item assignment 에러 발생

이처럼 python 문자열은 리스트처럼 인덱싱은 가능하지만, 값을 변경하려고 하면 에러가 발생한다.

a = "python"

new_a = "P" + a[1:]

print(new_a)
#--==>> Python

이 예시처럼 새로운 문자열을 생성하여 수정할 수 있지만 이건 정말 문자열 a를 수정한 것은 아니다.

또한 문자를 리스트로 변환한 후 수정한 이후 다시 문자열로 변환하는 방식과,
bytearray 타입을 사용해 텍스트 기반의 데이터를 직접 변경하는 방법이 있다.

a = "python"
list_a = list(a)
print(list_a)
#--==>> ['p', 'y', 't', 'h', 'o', 'n']

list_a[0] = "P"

new_a = "".join(list_a)
print(new_a)
#--==>> Python

이렇게 list() 메서드를 사용해 리스트로 변환하고
리스트는 변할 수 있는 가변 타입이므로 0번째 값을 수정했다.
이후 join() 메서드를 활용해 다시 문자열로 변환하였다.

a = bytearray(b'python')
a.extend(b'3')

print(a)
#--==>> bytearray(b'python3')

str_a = a.decode()
print(str_a)
#--==>> python3

이렇게도 수정이 가능하지만, 아스키 문자열만 가능해서 한글의 경우는 불가능하다.

a = bytearray(b'안녕하세요')
#--==>> SyntaxError: bytes can only contain ASCII literal characters.

 

'Python > Python' 카테고리의 다른 글

참조에 의한 변수와 객체 연결  (0) 2023.01.11
Python에서 집합을 사용하는 이유  (0) 2023.01.10
반내림 vs 내림(Python3)  (0) 2023.01.05
컴프리헨션  (0) 2022.12.28
__name__  (0) 2022.11.16