frozenset 유형은 파이썬에서 표준 set 유형의 변경 불가능한 버전으로 등장했습니다. 집합이 다른 set의 요소와 dict의 키로 사용될 수 있도록 하려면 변경 불가능한 변형이 필요했습니다.
실제 문제는 고유성을 보장하고 포함 여부를 빠르게 확인할 수 있으며, 또한 집합을 사전의 키 또는 다른 집합의 요소로 사용해야 합니다. 일반적인 set은 변경 가능하므로 해시화할 수 없습니다.
frozenset은 변경 불가능한(immutable) 집합입니다. 생성 후에는 요소를 변경할 수 없습니다: 추가, 삭제 또는 변경할 수 없습니다. 그러나 frozenset은 set과 동일한 작업을 지원하지만 변경 작업은 제외됩니다.
fs = frozenset([1, 2, 3]) print(2 in fs) # True # fs.add(4) # AttributeError: 'frozenset' 객체는 'add' 속성이 없습니다. map_dict = {fs: 'frozen'} # 가능, frozenset은 해시 가능하므로.
frozenset에 변경 가능한 객체(예: 리스트)를 포함할 수 있나요?
아니요, 해시 가능하고 변경 불가능한 객체만이 모든 유형의 집합의 요소가 될 수 있습니다. frozenset([[], 1])은 TypeError를 발생시키며, 일반 set과 마찬가지입니다.
frozenset에서 변경 가능한 set으로, 또는 그 반대로 변환할 수 있습니까?
두 유형 모두 표준 생성자를 통해 서로 변환할 수 있습니다:
fs = frozenset([1,2,3]) s = set(fs) print(type(s)) # <class 'set'>
frozenset은 add()나 remove() 메서드를 지원합니까?
아니요, 이러한 메서드는 없으며, 호출 시도는 AttributeError를 발생시킵니다. frozenset은 변경 불가능하기 때문입니다.
일반 set을 사전의 키로 사용하는 경우:
s = set([1, 2]) d = {s: 'value'} # TypeError: 해시 불가능한 유형: 'set'
장점:
단점:
frozenset으로 변환:
fs = frozenset([1, 2]) d = {fs: 'value'} # OK print(d[frozenset([1, 2])]) # 'value'
장점:
단점: