Python

컬렉션 타입 (세트)

gudwns5533 2026. 5. 26. 17:19

세트(set)는 중복되지 않는 항목들의 순서가 없는 컬렉션. 중괄호 {}를 사용하여 생성하거나 set() 생성자를 사용하여 만들 수 있음.

세트의 특징
  • 중복을 허용하지 않음 (Unique) : 세트 안에는 똑같은 값이 절대 두 개 이상 존재할 수 없다. 중복된 값을 넣으려고 하면 파이썬이 알아서 하나만 남기고 지워버림.
  • 순서가 없음 (Unordered) : 리스트나 튜플처럼 인덱스가 없다. 그래서 값을 넣은 순서대로 출력되지 않고 무작위로 섞여서 나온다.
  • 인덱싱 불가능 : 순서가 없기때문에 리스트나 튜플에서처럼 인덱싱을 할 수 없다.
세트의 생성
s1 = {1, 3, 5, 7}

s2 = {}
print(type(s2))
# <class 'dict'>          # 아무 요소도 넣지 않으면 딕셔너리가 된다.

li3 = [1, 2, 3, 4]
s3 = set(li3)
print(s3)
print(type(s3)
# {1, 2, 3, 4}
# <class 'set'>

s4 = {1, 3, 5, 3, 7, 9, 1, 5, 10, 7}
print(s4)
# {1, 3, 5, 7, 9, 10}     # set는 중복항목은 알아서 제거
세트의 메소드

 

1. add()

세트에 요소를 한개 추가한다.

s1 = {1, 3, 5, 7}
print(s1)

s1.add(2)
print(s1)
s1.add(4)
print(s1)
s1.add(7)     # 이미 요소 중 7이 있기 때문에 추가되지 않음
print(s1)

# {1, 3, 5, 7}
# {1, 2, 3, 5, 7}
# {1, 2, 3, 4, 5, 7}
# {1, 2, 3, 4, 5, 7}

 

2. update()

리스트, 튜플 등 여러 개의 값을 한 번에 추가한다.

s1 = {1, 3, 5, 7}
print(s1)

s1.update([2, 4, 6, 8, 10])
print(s1)

# {1, 3, 5, 7}
# {1, 2, 3, 4, 5, 6, 7, 8, 10}

 

3. remove()

세트의 요소를 제거. 단, 요소가 없으면 에러 발생.

s1 = {1, 3, 5, 7}
print(s1)

s1.remove(3)
print(s1)
# s1.remove(3)   # 요소 3이 이미 제거된 후라 또 시도하면 에러 발생.
# KeyError: 3

# {1, 3, 5, 7}
# {1, 5, 7}

 

4. discard()

세트의 요소를 제거. 단 요소가 없어도 에러가 발생하지 않음

s1 = {1, 3, 5, 7}
print(s1)

s1.discard(3)
print(s1)
s1.discard(3)
print(s1)

# {1, 3, 5, 7}
# {1, 5, 7}
# {1, 5, 7}

 

5. copy()

세트를 복사

s1 = {1, 3, 5, 7}
print(s1)

s2 = s1             # 메모리 주소를 복사
print(id(s1))
print(id(s2))

s2 = s1.copy()      # 값을 복사
print(s1)
print(s2)
print(id(s1))
print(id(s2))

# {1, 3, 5, 7}
# 2431983568928
# 2431983568928
# {1, 3, 5, 7}
# {1, 3, 5, 7}
# 2431983568928
# 2431983574528     # 둘이 다른 메모리에 저장된걸 알 수 있음

 

6. union() / A | B

합집합을 계산하여 반환

s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}

result1 = s3.union(s4)
print(result1)

result2 = s3 | s4
print(result2)

# {70, 40, 10, 50, 20, 60, 30}
# {70, 40, 10, 50, 20, 60, 30}

 

7. intersection() / A & B

교집합을 계산하여 반환

s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}

result1 = s3.intersection(s4)
print(result1)

result2 = s3 & s4
print(result2)

# {40, 50, 30}
# {40, 50, 30}

 

8. difference() / A - B

차집합을 계산하여 반환

s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}

result1 = s3.difference(s4)
print(result1)

result2 = s3 - s4
print(result2)

# {10, 20}
# {10, 20}

 

9. symmetric_difference() / A ^ B

대칭 차집합을 계산하여 반환

s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}

result1 = s3.symmetric_difference(s4)
print(result1)

result2 = s3 ^ s4
print(result2)

# {20, 70, 10, 60}
# {20, 70, 10, 60}

'Python' 카테고리의 다른 글

제어문 - 조건문  (1) 2026.05.27
컬렉션 타입 (딕셔너리)  (0) 2026.05.26
컬렉션 타입 (튜플)  (0) 2026.05.26
1.1 + 0.1 == 1.2 가 False가 나오는 이유  (1) 2026.05.25
컴퓨터가 음수(-)를 표현하는 방법  (1) 2026.05.25