파이썬/기초 프로그래밍

파이썬에서 딕셔너리를 읽기 전용으로 만들기 — MappingProxyType

Data Jun 2025. 9. 7. 16:34

파이썬의 dict는 기본적으로 가변 객체입니다. 그래서 새로운 키를 추가하거나 기존 값을 변경할 수 있습니다. 그런데 때로는 “읽기만 가능하게” 만들어야 안전할 때가 있죠. 이럴 때 사용할 수 있는 게 바로 **MappingProxyType**입니다

 

1. 기본 예제

from types import MappingProxyType

d = {
    'key1': 'value1'
}

# 딕셔너리 d를 읽기 전용으로 감싼다
d_frozen = MappingProxyType(d)

print(d_frozen['key1'])  # value1

여기서 d_frozen은 d를 감싸는 **읽기 전용 뷰(view)**입니다.

  • d_frozen을 통해서는 값을 조회만 가능합니다.
  • 값을 추가하거나 변경하려 하면 TypeError가 발생합니다.

 

2. 변경 시도

d_frozen['key2'] = 'value2'
# TypeError: 'mappingproxy' object does not support item assignment

d_frozen은 읽기 전용이라, 직접 수정은 불가능합니다.

 

3. 원본 딕셔너리는 여전히 수정 가능

d['key2'] = 'value2'
print(d_frozen['key2'])  # value2

흥미로운 점은, 원본 d에 새로운 값을 추가하면 d_frozen에도 바로 반영된다는 겁니다.
즉, MappingProxyType은 원본 딕셔너리의 **“실시간 읽기 전용 뷰”**라고 이해할 수 있습니다.

 

3. 언제 쓰면 좋을까?

  • 외부에 딕셔너리를 전달할 때: 실수로 값이 변경되지 않도록 보호하고 싶을 때
  • 불변 데이터 보장: 내부적으로 딕셔너리를 쓰되, 외부에서는 수정할 수 없게 만들고 싶을 때

 

 

정리하면

  • MappingProxyType(d) → 딕셔너리 d를 읽기 전용 뷰로 감싼다.
  • d_frozen에서는 조회만 가능, 수정 불가.
  • 하지만 원본 d를 바꾸면 d_frozen에도 반영된다.

즉, 딕셔너리를 읽기 전용으로 안전하게 공개하고 싶을 때 쓰는 도구다.