불변 딕셔너리와 지능형 Set에 대해 배워보자. 그리고 Set선언에 대한 최적화도 알아보자.
# immutable Dict
from types import MappingProxyType
# 수정 가능
d = {'key1': 'value1'}
# 수정 불가능
d_frozen = MappingProxyType(d)
위처럼 MappingProxyType
이라는 함수를 이용하면 딕셔너리를 불변으로 만들 수 있다. 그런데 그렇다고 hash()를 사용할수 있는건 아니라고 함.
수정하려고 하면..
d_frozen['key1'] = 'value2'
할당이 안된다는 오류가 난다.
# set
s1 = {'apple', 'orange', 'apple', 'orange', 'kiwi'}
s2 = set(['apple', 'orange', 'apple', 'orange', 'kiwi'])
s3 = {1}
# 빈 set을 선언할때는 set()을 이용해야 한다. {}는 빈 딕셔너리 생성한다.
s4 = set()
# 읽기 전용 set선언
s5 = frozenset({'apple', 'orange', 'apple', 'orange', 'kiwi'})
파이썬은 바이트 코드를 실행한다. 이 바이트 코드를 파이썬 인터프리터가 실행하는 구조임.
성능을 살펴보기 위해 dis
라는 함수를 사용해보자. 바이트코드의 흐름을 살펴볼 수 있음]