파이썬의 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에도 반영된다.
즉, 딕셔너리를 읽기 전용으로 안전하게 공개하고 싶을 때 쓰는 도구다.
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
| 일급 객체(First-class Object)란 무엇일까? (0) | 2025.09.07 |
|---|---|
| 파이썬 reduce로 배우는 누적 연산 (0) | 2025.09.07 |
| 파이썬 해시테이블 개념 및 튜플 → 딕셔너리 변환하기 (0) | 2025.09.07 |
| 파이썬 sorted() vs 리스트 .sort() 제대로 정리하기 (0) | 2025.09.07 |
| 파이썬의 시퀀스형(Sequence) (0) | 2025.09.07 |