- 개요
이전에 알아본 해시 테이블 기반의 시퀀스인 dictionary와 set에 대해서 더 알아본다
2개의 시퀀스 모두 중복을 허용하지 않는다
따라서 dictionary의 경우 Key를, set의 경우 Value에 대한 중복이 허용되지 않는다
1) dictionary
dictionary는 기본적으로 mutable 시퀀스로서 Key나 Value를 수정하는 것이 가능하다
그러나 types 모듈에서 지원하는 MappingProxyType을 사용하면 immutable한 dictionary를 사용할 수 있다
from types import MappingProxyType
d1 = {'Key1' : 'value1'}
d2 = MappingProxyType(d1)
print(d1, id(d1))
print(d2, id(d2))
d1['Key2'] = 'value2'
print(d1)
d2['Key2'] = 'value2'
print(d2)
코드를 위와 같이 구성하였다
2개의 딕셔너리 d1과 d2를 생성하였지만, d2의 경우 MappingProxyType을 사용하였다

위와 같이 생성한 객체와 객체의 메모리 주소를 확인할 수 있다


그러나 딕셔너리를 수정하는 경우에 d1과 d2에서 차이가 발생하는 것을 확인할 수 있다
d2의 경우 불변형 딕셔너리로서 값을 수정하는 것이 금지되는 것을 확인할 수 있다
2) set
2 - 1) set 객체의 선언
s1 = {'A', 'B', 'C', 'D', 'E'}
s2 = set(['A', 'B', 'C', 'D', 'E'])
s3 = {3}
s4 = set()
set 객체는 위와 같은 방식으로 선언할 수 있다
이때 빈 set 객체를 생성하는 경우 반드시 set 함수를 사용하여 생성해야 한다
단순히 {} 연산자를 사용하는 경우 딕셔너리로서 생성된다
2 - 2) set 객체 선언 최적화
from dis import dis
print(dis('{10}'))
print(dis('set([10])'))
dis 모듈의 dis 함수를 사용하면 파이썬 인터프리터의 동작을 바이트 코드로 볼 수 있다
위와 같이 set 객체를 선언하는 2가지 방법을 바이트 코드로 확인한다


위와 같이 set 기호를 사용하는 경우가 훨씬 더 빠르게 생성되는 것을 확인할 수 있다
2 - 3) 불변형 set
set도 dictionary와 마찬가지로 불변형 객체를 생성할 수 있다
이때 사용하는 함수가 바로 frozenset이다
s1 = {'A', 'B', 'C', 'D', 'E'}
s5 = frozenset(['A', 'B', 'C', 'D', 'E'])
s1.add('F')
print(s1)
s5.add('F')
print(s5)
위와 같이 2개의 set을 생성하였다
이때 s1은 일반적인 set 객체이지만, s5는 frozenset을 사용하여 불변형 set으로 생성하였다


실행 결과는 위와 같다
s1의 경우 문제없이 수정이 이루어졌지만, s2의 경우 수정을 막는 것을 확인할 수 있다
'Python > 파이썬 심화' 카테고리의 다른 글
| 일급 함수의 특징 (2) (0) | 2025.08.15 |
|---|---|
| 일급 함수의 특징 (1) (0) | 2025.08.12 |
| 파이썬 시퀀스 (6) (0) | 2025.08.12 |
| 파이썬 시퀀스 (5) (0) | 2025.08.07 |
| 파이썬 시퀀스 (4) (0) | 2025.08.07 |