파이썬에서 불변 사전을 만드는 방법 #PyTip01

Python은 배터리 포함 기능으로 유명하며 모든 데이터 구조 요구 사항에 대한 솔루션을 제공합니다. Python의 사전은 키/값 쌍으로 레코드를 저장할 때 매우 유용합니다.
사전은 훌륭하지만 변경 가능하므로 초기화 후에 값을 변경할 수 있습니다.

이 짧은 게시물에서는 MappingProxyType를 사용하여 사전을 불변으로 만드는 방법을 배웁니다.

문제



다음은 Python에서 사전을 사용하는 방법의 예입니다.

>>> person = {"id" : 735616, "first_name": "John", "last_name":"Doe"}
>>> person["id"]
735616
>>> person["first_name"] + ' ' + person["last_name"]
'John Doe'
>>> person["id"] = 000000
>>> person["id"]
0


위의 코드에서 person 레코드가 변경되었으며 이 변경을 차단할 방법이 없음을 알 수 있습니다. 이것은 MappingProxyType가 들어오는 곳입니다.

해결책


MappingProxyType는 기본 데이터 구조에 대한 프록시를 제공하는 읽기 전용 래퍼입니다. MappingProxyType 데이터를 변경할 수 없게 만드는 항목 할당을 지원하지 않습니다.

>>> from types import MappingProxyType
>>> im_person = MappingProxyType({"id":736533, "first_name":"John", "last_name":"Doe"})
>>> im_person["id"]
736533
>>> im_person["id"] = 87
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment


위의 예에서 id 의 값을 변경하려고 시도하면 MappingProxyType 가 즉시 TypeError 를 발생시켜 사전을 불변으로 만드는 것을 볼 수 있습니다. MappingProxyType는 사전뿐만 아니라 모든 데이터 유형을 허용합니다. strlist 를 사용할 수도 있습니다.

경고


MappingProxyType 를 사용하기 전에 기본 데이터 구조에 프록시만 제공한다는 점을 알아야 합니다. 즉, 기본 데이터가 변경되면 MappingProxyType에 해당 변경 사항이 반영됩니다.

>>> im_person = MappingProxyType(person)
>>> im_person
mappingproxy({'id': 0, 'first_name': 'John', 'last_name': 'Doe'})
>>> person
{'id': 0, 'first_name': 'John', 'last_name': 'Doe'}
>>> person["id"] = 00
>>> im_person
mappingproxy({'id': 0, 'first_name': 'John', 'last_name': 'Doe'})
>>>


위의 코드에서 볼 수 있듯이 기본 데이터 사전이 변경될 때 MappingProxyType가 변경되었습니다.

결론



이 짧은 기사에서 types.MappingProxyType에 대해 배웠습니다.
키/값 쌍이 변경되지 않도록 하려는 경우에 유용합니다. 당신이 그것을 좋아 바랍니다.

좋은 웹페이지 즐겨찾기