파이썬에서는 모든 것이 객체입니다. 크게 가변과 불변 타입으로 나눌 수 있는데요. 어떤 타입이냐에 따라서 그 속성을 변경할 수도 하지 못할 수도 있습니다.
가변 객체
대표적인 것으로 list와 dict가 있습니다. 가변 객체는 생성된 인스턴스가 가지고 있는 값을 원하는 대로 바꿀 수 있습니다.
mutable_list = [1, 2, 3, 4]
print(mutable_list)
# [1, 2, 3, 4]
mutable_list[1] = 222
print(mutable_list)
# [1, 222, 3, 4]
리스트의 두 번째 요소인 mutable_list[1]의 값이 변경된 것을 확인할 수 있습니다. 같은 동작을 튜플 인스턴스에 적용해보면 다음과 같은 오류를 만나게 됩니다. 튜플은 인덱싱, 슬라이싱은 가능하지만 불변 객체이기 때문에 요 솟값은 바꿀 수 없습니다.
immutable_tuple = (1, 2, 3, 4)
print(immutable_tuple)
# (1, 2, 3, 4)
immutable_tuple[1] = 222
"""
Traceback (most recent call last):
File "main.py", line 5, in <module>
immutable_tuple[1] = 222
TypeError: 'tuple' object does not support item assignment
"""
tuple의 요솟값을 변경할 수 없기 때문에 새로운 tuple 인스턴스를 같은 이름의 변수에 할당하는 방법으로 변수가 가리키는 대상을 바꿔야 합니다.
immutable_tuple = (1, 2, 3, 4)
print(immutable_tuple)
# (1, 2, 3, 4)
immutable_tuple = (1, 222, 3, 4)
print(immutable_tuple)
# (1, 222, 3, 4)
불변 객체
int, float, str, bool, tuple이 있습니다. 깜빡하기 쉬운데 문자열도 불변입니다. 문자열의 문자 하나를 바꾸려 한다면 다음과 같은 오류 메시지를 볼 수 있습니다.
immutable_string = "Hello"
immutable_string[0] = "Y"
"""
Traceback (most recent call last):
File "main.py", line 2, in <module>
immutable_string[0] = "Y"
TypeError: 'str' object does not support item assignment
"""
문자열이 불변이기 때문에 발생한 오류입니다. 값을 바꾸고 싶다면 새로운 문자열을 만들어야 합니다.
immutable_string = "Hello"
immutable_string = "Yello"
print(immutable_string)
# Yello