PHpullh

PYTHON · 컬렉션

불변 컬렉션

Python에서 불변 컬렉션을 활용하여 안전한 데이터 구조를 만드는 방법입니다.

컬렉션고급immutable불변MappingProxyTypefrozen

핵심 설명

Python에서 불변 컬렉션을 활용하여 안전한 데이터 구조를 만드는 방법입니다.

Python code

from types import MappingProxyType
from dataclasses import dataclass, field

# MappingProxyType: 읽기 전용 딕셔너리 뷰
original = {"a": 1, "b": 2, "c": 3}
readonly = MappingProxyType(original)
print(readonly["a"])      # 1
# readonly["a"] = 10      # TypeError!

# 원본 변경은 뷰에 반영됨
original["d"] = 4
print(readonly["d"])      # 4

# 불변 데이터클래스
@dataclass(frozen=True)
class Config:
    host: str
    port: int
    tags: tuple[str, ...] = ()  # 불변 시퀀스

    def with_port(self, new_port: int) -> "Config":
        """변경된 복사본 반환"""
        return Config(self.host, new_port, self.tags)

cfg = Config("localhost", 8080, ("web", "api"))
# cfg.port = 9090  # FrozenInstanceError

cfg2 = cfg.with_port(9090)
print(f"{cfg.port} → {cfg2.port}")  # 8080 → 9090

# 해시 가능 (딕셔너리 키로 사용 가능)
cache = {cfg: "기본 설정", cfg2: "새 설정"}
print(cache[cfg])  # 기본 설정

학습 팁

불변 데이터클래스는 해시 가능하므로 딕셔너리 키나 세트 원소로 사용할 수 있습니다.

주의할 점

frozen=True 데이터클래스에 mutable 필드(리스트)를 넣으면 외부에서 내용을 변경할 수 있습니다. 튜플이나 frozenset을 사용하세요.

자주 묻는 질문

불변 컬렉션란 무엇인가요?

Python에서 불변 컬렉션을 활용하여 안전한 데이터 구조를 만드는 방법입니다.

불변 컬렉션 학습 시 주의할 점은 무엇인가요?

frozen=True 데이터클래스에 mutable 필드(리스트)를 넣으면 외부에서 내용을 변경할 수 있습니다. 튜플이나 frozenset을 사용하세요.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.