파이썬 리스트와 튜플 차이 — 언제 무엇을 쓸까?
2026-06-06 · Python · 파이썬 · 기초 · 자료구조
파이썬 리스트와 튜플 차이, 핵심부터
파이썬 리스트와 튜플의 가장 큰 차이는 가변성(mutability)입니다. 리스트는 만든 뒤에도 요소를 추가·삭제·변경할 수 있는 가변(mutable) 자료형이고, 튜플은 한 번 만들면 바꿀 수 없는 불변(immutable) 자료형입니다. 겉모습은 대괄호 []와 소괄호 () 차이지만, 이 가변성 하나가 속도와 용도를 모두 좌우합니다.
기본 문법
my_list = [1, 2, 3] # 리스트: 대괄호
my_tuple = (1, 2, 3) # 튜플: 소괄호
요소 1개짜리 튜플은 쉼표가 반드시 필요합니다. (1)은 그냥 정수 1이고, (1,)이라야 튜플입니다.
not_tuple = (1) # int
yes_tuple = (1,) # tuple
print(type(not_tuple), type(yes_tuple)) # <class 'int'> <class 'tuple'>
가변성 차이 확인
my_list[0] = 100 # 리스트는 변경 가능
my_list.append(4)
print(my_list) # [100, 2, 3, 4]
# my_tuple[0] = 100 # TypeError 발생!
print(my_tuple[0]) # 읽기는 가능: 1
주요 차이 비교
| 구분 | 리스트(list) | 튜플(tuple) |
|---|---|---|
| 표기 | 대괄호 [] | 소괄호 () |
| 가변성 | 변경 가능(mutable) | 변경 불가(immutable) |
| 속도 | 상대적으로 느림 | 약간 더 빠름 |
| 메모리 | 더 사용 | 더 적게 사용 |
| 딕셔너리 키 | 불가능 | 가능(불변일 때) |
| 주 용도 | 변하는 데이터 모음 | 고정된 묶음, 반환값 |
실전 예제: 언제 무엇을 쓸까
튜플 — 함수에서 여러 값 반환
def min_max(nums):
return min(nums), max(nums) # 튜플로 반환
lo, hi = min_max([4, 1, 9, 3])
print(lo, hi) # 1 9
튜플 — 딕셔너리 키로 사용
좌표처럼 변하지 않는 묶음은 튜플로 만들어 딕셔너리 키로 쓸 수 있습니다. 리스트는 키가 될 수 없습니다.
grid = {(0, 0): "시작", (1, 2): "보물"}
print(grid[(1, 2)]) # 보물
리스트 — 데이터가 계속 바뀔 때
cart = []
cart.append("사과")
cart.append("바나나")
cart.remove("사과")
print(cart) # ['바나나']
자주 하는 실수
- 1개짜리 튜플에 쉼표 누락:
(1)은 튜플이 아닙니다.(1,)처럼 쉼표를 꼭 붙이세요. - 튜플을 수정하려다 오류: 튜플 요소에 값을 대입하면
TypeError가 납니다. 바꿔야 한다면 처음부터 리스트를 쓰세요. - 튜플 안 가변 객체 오해: 튜플 안에 리스트가 들어 있으면 그 리스트 내부는 바꿀 수 있습니다. 튜플의 불변성은 "어떤 객체를 가리키는지"가 고정된다는 뜻입니다.
- 괄호 생략 혼동:
a = 1, 2, 3처럼 괄호 없이 쉼표만 써도 튜플이 됩니다. 의도치 않은 튜플 생성에 주의하세요.
자주 묻는 질문
Q. 튜플이 빠르다면 항상 튜플을 쓰는 게 좋나요?
아닙니다. 속도 차이는 대부분의 프로그램에서 체감되지 않습니다. 데이터가 변할 가능성이 있으면 리스트, 변하지 않아야 안전한 묶음이면 튜플을 선택하세요. 의미가 우선입니다.
Q. 튜플도 정렬할 수 있나요?
튜플 자체를 제자리에서 정렬할 수는 없지만, sorted(my_tuple)를 쓰면 정렬된 리스트를 새로 반환합니다. 다시 튜플이 필요하면 tuple(sorted(my_tuple))로 감싸세요.
Q. 리스트를 튜플로, 튜플을 리스트로 바꿀 수 있나요?
네. tuple([1, 2, 3])와 list((1, 2, 3))로 서로 변환할 수 있습니다. 가변 작업이 잠깐 필요하면 리스트로 바꿔 처리한 뒤 다시 튜플로 되돌리는 패턴을 씁니다.