[python] 파이썬에서 불변성을 유지하는 방법으로 어떤 기능이 제공되나요?

파이썬은 불변성을 유지하기 위해 몇 가지 기능을 제공합니다. 다음은 그 중 일부입니다.

  1. Immutable 데이터 타입: 파이썬은 문자열(string), 튜플(tuple) 등과 같은 불변성을 가지는 데이터 타입을 제공합니다. 이러한 데이터 타입은 한 번 생성되면 값을 변경할 수 없습니다.

예를 들어, 문자열은 수정할 수 없기 때문에 새로운 문자열을 생성하거나 수정된 문자열을 반환하는 메소드를 사용해야 합니다. str 클래스의 replace() 메소드를 사용하면 원본 문자열을 변경하지 않고 새로운 문자열을 반환할 수 있습니다.

original_string = "Hello, World!"
new_string = original_string.replace("Hello", "Hi")
print(original_string)  # 출력: "Hello, World!"
print(new_string)  # 출력: "Hi, World!"
  1. @frozen 데코레이터: 파이썬 3.7부터는 @frozen 데코레이터를 사용하여 클래스를 불변으로 만들 수 있습니다. 이렇게 데코레이터를 사용하면 클래스의 속성을 변경할 수 없으며, 인스턴스를 변경하려는 시도는 예외를 발생시킵니다.
from typing import List
@dataclass(frozen=True)
class ImmutableClass:
    int_val: int
    str_val: str
    list_val: List[int]

instance = ImmutableClass(10, "Hello", [1, 2, 3])
instance.int_val = 20  # 예외 발생
instance.list_val.append(4)  # 예외 발생
  1. copy 모듈: 파이썬의 copy 모듈에는 불변 객체를 생성하거나 복사하기 위한 기능이 있습니다. copy 모듈의 copy() 함수를 사용하여 불변 객체를 얕은 복사할 수 있습니다.
import copy
immutable_list = (1, 2, 3)
new_list = copy.copy(immutable_list)

이러한 방법을 사용하면 파이썬에서 불변성을 유지할 수 있습니다. 불변성은 값의 변경이나 부작용을 줄이고, 코드를 더 안정적이고 예측 가능하게 만들어줍니다.