# 빈 구조 생성 시 집합과 딕셔너리 구분
a = {}
print(type(a))
a = set()
print(type(a))
출력
<class 'dict'> <class 'set'>
Python에서 집합 수정하기
집합은 가변이지만 순서가 없어 인덱싱이나 슬라이싱을 지원하지 않습니다.
add()로 단일 요소 추가, update()로 다른 이터러블 병합. 중복 항목은 자동 무시.
# 예제: 요소 추가
my_set = {1, 3}
print(my_set)
# 집합 인덱싱 시도 시 에러
# my_set[0] # TypeError: 'set' object does not support indexing
# 단일 요소 추가
my_set.add(2)
print(my_set)
# 리스트에서 여러 요소 추가
my_set.update([2, 3, 4])
print(my_set)
# 리스트와 다른 집합 결합
my_set.update([4, 5], {1, 6, 8})
print(my_set)
Python 집합은 합집합, 교집합, 차집합, 대칭 차집합 같은 고전적 집합 대수를 지원합니다. 연산자나 전용 메서드로 호출 가능.
두 예제 집합 사용:
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
합집합
A와 B의 합집합은 모든 고유 요소를 결합.
print(A | B)
출력
{1, 2, 3, 4, 5, 6, 7, 8}
교집합
교집합은 두 집합에 공통인 요소만 반환.
print(A & B)
출력
{4, 5}
차집합
차집합 A - B는 A에 있고 B에 없는 요소들.
print(A - B)
출력
{1, 2, 3}
대칭 차집합
대칭 차집합 A ^ B는 두 집합 중 하나에만 속하는 요소들(공통 제외).
print(A ^ B)
출력
{1, 2, 3, 6, 7, 8}
추가 집합 메서드
집합 객체에서 사용 가능한 모든 내장 메서드 빠른 참조:
메서드
설명
add()
집합에 요소 추가
clear()
모든 요소 제거
copy()
얕은 복사본 반환
difference()
호출자엔 있고 다른 집합엔 없는 요소들의 새 집합 반환
difference_update()
제자리 차집합 제거
discard()
요소 있으면 제거; 없으면 에러 없음
intersection()
공통 요소들의 새 집합 반환
intersection_update()
제자리 교집합 갱신
isdisjoint()
공통 요소 없으면 True
issubset()
호출자가 다른 집합의 부분집합이면 True
issuperset()
호출자가 다른 집합을 완전히 포함하면 True
pop()
임의 요소 제거 및 반환; 비었으면 KeyError
remove()
요소 제거; 없으면 KeyError
symmetric_difference()
각 집합에만 속하는 요소들의 새 집합 반환
symmetric_difference_update()
제자리 대칭 차집합 갱신
union()
모든 고유 요소를 담은 새 집합 반환
update()
다른 이터러블과 제자리 합집합
집합 멤버십 테스트
in 키워드로 요소 존재 확인.
my_set = set("apple")
print('a' in my_set) # True
print('p' not in my_set) # False
출력
True False
집합 순회하기
표준 for 루프로 집합 순회; 순서는 보장되지 않음.
for letter in set("apple"):
print(letter)
집합과 함께 쓰는 내장 함수
len(), max(), min(), sum(), all(), any(), sorted() 등이 집합과 원활히 작동. 주요 유틸리티 표:
함수
설명
all()
모든 요소가 참이면 True(빈 집합도 True)
any()
최소 한 요소가 참이면 True
enumerate()
인덱스와 함께 순회, 디버깅용
len()
요소 개수
max()
최대 요소
min()
최소 요소
sorted()
집합에서 정렬된 리스트 반환
sum()
모든 숫자 요소의 합
Python Frozenset
frozenset은 집합의 불변 버전. 생성 후 요소 변경 불가해 해시 가능하며 딕셔너리 키로 사용 가능.
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])
지원 연산은 일반 집합과 동일하나 변경 메서드는 제외.
print(A.isdisjoint(B))
print(A.difference(B))
print(A | B)
# 요소 추가 시도 시 AttributeError
# A.add(3) # AttributeError: 'frozenset' object has no attribute 'add'