본문 바로가기

카테고리 없음

파이썬 가변 객체와 불변 객체(문자열은 불변 객체이다)

파이썬에서는 모든 것이 객체입니다. 크게 가변과 불변 타입으로 나눌 수 있는데요. 어떤 타입이냐에 따라서 그 속성을 변경할 수도 하지 못할 수도 있습니다.

 

가변 객체 

대표적인 것으로 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