데이터 타입 | |
---|---|
가변(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 |