리스트 vs 튜플 vs 딕셔너리 vs 집합

언제 뭘 써야 할까?

Jun 2, 2025

“리스트, 튜플, 딕셔너리, 집합”
코드를 짜다 보면 자연스럽게 마주치게 되는 자료형들.

처음엔 비슷해 보이지만,
하나하나 뜯어보면 전혀 다른 성격을 가진 친구들이다.

어떤 건 순서가 있고,
어떤 건 중복을 허용하지 않고,
어떤 건 변경이 가능하지도 않다.

자료형의 특성을 제대로 이해하고 쓰면,
더 깔끔하고 효율적인 코드를 짤 수 있다.


1. 리스트 (list)

    • 정의: 순서가 있는 변경 가능한(mutable) 자료형
    • 형태: [요소1, 요소2, …]
    • 특징
      (1) 요소 추가, 삭제, 수정 가능
      (2) 인덱싱(indexing), 슬라이싱(slicing) 가능

예시

my_list = [10, 20, 30]
my_list.append(40)
print(my_list[1])  # 20

주요 메서드

메서드 설명 예시
append(x) 맨 뒤에 요소 추가 a.append(3)
insert(i, x) 특정 위치에 요소 삽입 a.insert(1, 10)
extend(iter) 리스트 뒤에 다른 iterable 추가 a.extend([4,5])
remove(x) 해당 값 제거 (첫 번째만) a.remove(2)
pop([i]) 인덱스 위치 요소 꺼내기 (기본 마지막) a.pop()
clear() 모든 요소 제거 a.clear()
index(x) 값의 첫 번째 인덱스 반환 a.index(10)
count(x) 특정 값의 개수 반환 a.count(2)
sort() 정렬 (기본 오름차순) a.sort()
reverse() 순서 반전 a.reverse()

관련 함수

함수 설명
len(a) 요소 개수
sum(a) 합계 (숫자일 때)
max(a), min(a) 최대값, 최소값

2. 튜플 (tuple)

    • 정의: 순서가 있는 변경 불가능한(immutable) 자료형
    • 형태: (요소1, 요소2, …)
    • 특징
      (1) 한 번 선언되면 값을 바꿀 수 없음
      (2) 불변성 덕분에 보안성, 성능 측면에서 장점 있음

예시

my_tuple = (10, 20, 30)
print(my_tuple[0])  # 10

주요 메서드

메서드 설명 예시
count(x) 값의 개수 반환 t.count(3)
index(x) 값의 첫 인덱스 반환 t.index(2)

튜플은 불변형이므로 값 추가/삭제 관련 메서드 없음

관련 함수

함수 설명
len(t) 요소 개수
sum(t) 합계 (숫자일 때)
max(t), min(t) 최대값, 최소값

3. 딕셔너리 (dict)

    • 정의: 키(key):값(value) 쌍으로 이루어진 변경 가능한 자료형
    • 형태: {key1: value1, key2: value2, …}
    • 특징
      (1) 순서 보장 (파이썬 3.7+)
      (2) 키 중복 불가, 값은 중복 가능
      (3) 키로는 해시 가능한(immutable) 타입만 사용 가능

예시

my_dict = {'name': '지희', 'age': 25}
print(my_dict['name'])  # 지희

주요 메서드

메서드 설명 예시
get(key) 키의 값을 반환 (없으면 None) d.get('name')
keys() 키 목록 반환 d.keys()
values() 값 목록 반환 d.values()
items() (키, 값) 쌍 목록 반환 d.items()
update(dict) 딕셔너리 값 업데이트 d.update({'age': 30})
pop(key) 키 삭제하고 값 반환 d.pop('name')
popitem() 마지막 키-값 쌍 제거 d.popitem()
clear() 모든 요소 제거 d.clear()
setdefault(k, v) 키가 없으면 새 키와 값 추가 d.setdefault('hobby', 'book')

관련 함수

함수 설명
len(d) 항목 개수
in 연산자 키 존재 여부 확인 → ‘name’ in d

4. 집합 (set)

    • 정의: 중복 없는 요소들의 모음, 순서 없음
    • 형태: {요소1, 요소2, …}
      (빈 집합은 set() 으로 생성해야 함)
    • 특징
      (1) 중복 제거, 교집합/합집합 등 집합 연산 가능
      (2) 순서 없음 → 인덱싱 불가

예시

my_set = {1, 2, 3, 3, 2}
print(my_set)  # {1, 2, 3}

주요 메서드

메서드 설명 예시
add(x) 요소 추가 s.add(3)
update(iter) 여러 요소 한꺼번에 추가 s.update([4,5])
remove(x) 요소 제거 (없으면 오류 발생) s.remove(2)
discard(x) 요소 제거 (없으면 무시) s.discard(2)
pop() 임의의 요소 제거 s.pop()
clear() 전체 요소 제거 s.clear()
union(s2) 합집합 반환 s1.union(s2)
intersection(s2) 교집합 반환 s1.intersection(s2)
difference(s2) 차집합 반환 s1.difference(s2)
issubset(s2) 부분집합인지 확인 s1.issubset(s2)
issuperset(s2) 상위집합인지 확인 s1.issuperset(s2)
copy() 집합 복사 s2 = s1.copy()

관련 함수

함수 설명
len(s) 요소 개수
max(t), min(t) 최대값, 최소값
in 연산자 원소 존재 여부 확인

5. 자료형 비교 분석

항목 리스트 (list) 튜플 (tuple) 딕셔너리 (dict) 집합 (set)
순서 O O O (Python 3.7+) X
중복 허용 O O 키: X / 값: O X
변경 가능 O X O O
인덱싱 O O 키 접근 X
형태 [1, 2, 3] (1, 2, 3) {'a': 1, 'b': 2} {1, 2, 3}
사용 목적 순서 있는 데이터 고정된 데이터 구조적 데이터 표현 중복 제거, 집합 연산

사용 상황 예시

항목 상황 예시
list 학생들의 출석부 (순서 중요 + 수정 필요)
tuple 고정된 좌표값 (불변)
dict 학생 정보 저장 (학번: 이름)
set 중복 제거가 필요한 태그 목록

오늘을 마치며

자료형을 제대로 이해하는 건
단순한 문법 그 이상으로, 좋은 코드의 시작점이다.

앞으로 데이터를 다룰 때 어떤 자료형을 선택하고 왜 그렇게 했는지
“의도적인 선택”을 할 수 있다면,
지금보다 훨씬 더 단단한 코드를 짤 수 있을 것이다.