python

Python - 컬렉션 타입 – 세트(set) , 딕셔너리 (dict)

cinnamonbrown 2026. 5. 26. 21:14

1. 세트 (set)

세트(set)는

 

중복되지 않는 항목들을 저장하는

 

순서가 없는 컬렉션이다.

 

  • 중괄호 {}를 사용하여 생성하거나
  • set() 생성자를 사용할 수 있다.

 다만 비어있는 세트를 만들 때는 주의해야 한다.

{}는 빈 세트가 아니라 빈 딕셔너리(dict) 로 인식된다.


그래서 비어있는 세트를 만들고 싶다면 아래처럼 set()을 사용해야 한다.


2. 세트의 메소드

2.1 add() – 세트에 요소를 추가

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

s1.add(2) 
s1.add(4)
s1.add(7)

print(s1) # {1, 2, 3, 4, 5, 7}

실행 결과

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

 

👉 헷갈리지 말아야 할 점은 set중복을 허용하지 않는다는 것이다.


그래서 이미 존재하는 7을 다시 추가해도 중복으로 들어가지 않는다.


또 출력 결과를 보면 정렬된 것처럼 보이기도 하지만, 원래 set은 순서를 보장하지 않는 자료형이다.


즉, 세트는 순서와 상관없이 저장되는 것이다.


2.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}

2.3 remove() – 요소가 없으면 에러가 발생함

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

s1.remove(3)
print(s1) # {1,5,7}
# s1.remove(3) # KeyError: 3

실행 결과

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

2.4 discard() – 요소가 없어도 에러가 발생하지 않음

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


s1.discard(3) 
print(s1) # {1,5,7}
s1.discard(3)
print(s1) # {1,5,7}

실행 결과

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

2.5 copy() – 세트 복사

 

👉  s2s1의 메모리 주소를 복사해 같이 참조하게 된다.
👉 따라서 s1s2id는 같다.

 

 

👉  반면 copy()를 사용하면 s1의 값만 복사하여 새로운 객체를 만든다.
즉, 서로 다른 메모리 주소를 참조하기 때문에 id 값도 다르게 나온다.


2.6 집합 함수

set은 수학에서 사용하는 집합과 비슷한 개념이라 집합 연산을 사용할 수 있다.

2.6.1 union() / |  :  합집합을 계산하여 반환


2.6.2 intersection() / &    : 교집합을 계산하여 반환


2.6.3 difference() / -   : 차집합을 계산하여 반환


2.6.4 symmetric_difference() / ^  : 대등 차집합을 계산하여 반환


3. 딕셔너리 (dict)

파이썬의 딕셔너리는

 

키-값 쌍을 저장하는

순서 없는

변경 가능한(mutable) 컬렉션이다

  • 중괄호 {}를 사용하여 생성하고,
  • 키-값 쌍들은 쉼표 ,로 구분된다
  • 각 키-값 쌍은 콜론 :으로 구분된다

 

👉 dict의 key는 중복이 허용되지 않는다


3.1 딕셔너리 수정하기

딕셔너리는 추가, 삭제, 수정이 가능하다.

  • key 변경 불가능한( immutable ) 타입이어야 한다.
  • value는 어떤 타입이든 상관 없다

immutable Type

  • 문자열(str)
  • 정수(int)
  • 튜플 (tuple)

※ 리스트(list)는 변경 가능한 타입이므로 key로 사용할 수 없다.

dic4 = {1:'apple'}
print(dic4) # {1:'apple'}

dic4[100] = 'banana'
print(dic4) # { 1: 'apple',100:'banana'}

dic4[100] = 'orange' # 변경 / 없으면 만들었다 있다면 value 수정 
print(dic4) # { 1: 'apple',100: 'orange'}

dic4[50] = 'melon'
print(dic4) # { 1: 'apple',100: 'orange', 50: 'melon'}

del dic4[100] # 삭제
print(dic4) #  { 1: 'apple', 50: 'melon'}

실행 결과

{1: 'apple'}
{1: 'apple', 100: 'banana'}
{1: 'apple', 100: 'orange'}
{1: 'apple', 100: 'orange', 50: 'melon'}
{1: 'apple', 50: 'melon'}

3.2 딕셔너리 요소 추가

 

👉 해당 key('gender')존재하지 않으면 새로운 key-value 쌍이 추가된다.

3.3 딕셔너리 요소의 값 변경

 

👉 반대로 key가 이미 존재한다면 새로운 항목이 추가되는 것이 아니라 value가 수정된다.


4. 딕셔너리의 함수와 메서드

4.1 keys() – 딕셔너리의 모든 키를 반환


4.2 values() – 딕셔너리의 모든 value를 반환


4.3 items() – 딕셔너리의 모든 키-값을 튜플로 반환


4.4 get() – 특정 키에 대한 값을 반환 / 만약 키가 딕셔너리에 없으면 None 반환

예를 들어

dic3['userid']

 

 

이때 userid가 존재하지 않으면 에러가 발생한다.
하지만 get() 메서드를 사용하면 key가 없어도 에러 대신 None을 반환한다.
None 대신 기본값을 직접 설정할 수도 있다.

 

dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
print('dic3=',dic3)


print("dic3.get(‘userid’)=",dic3.get('userid')) # apple
print("dic3.get(gender)=",dic3.get('gender')) # None

print(dic3.get('gender', '성별 알수없음'))
print(dic3.get('name', '이름 알수없음'))

실행결과

dic3= {'no': 1, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111'}
dic3.get(‘userid’)= apple
dic3.get(gender)= None
성별 알수없음
김사과

4.5 pop()

  • 특정 key를 제거하고 해당 value를 반환한다.
  • 존재하지 않는 key를 삭제하면 에러가 발생한다.


4.6 in – 특정 키 존재 여부 확인

이렇게 사용하면 딕셔너리에 특정 key가 존재하는지 확인할 수 있다.
주의해야 할 점은 value가 아니라 key 기준으로 검사한다는 점이다.

 

 

👉 딕셔너리의 이 메서드들은 반복문에서 유용하게 쓰일 수 있다.