튜플(Tuple)과 세트(Set) — 리스트와는 다른 두 자료구조
지난 화의 리스트에 이어,
값을 한 번 저장하면 바꿀 수 없는 튜플과 중복을 허용하지 않는 세트를 배웁니다. 리스트와 무엇이 다른지, 각각 언제 쓰면 좋은지 비교하며 정리해요.
요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠.
개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.
이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.
고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.
중간중간 빈칸 채우기랑 학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

튜플(Tuple)은 리스트처럼 여러 개의 데이터를 하나로 저장하는 자료구조입니다. 리스트와 매우 비슷하지만 결정적인 차이가 하나 있습니다. 튜플은 한 번 만들면 값을 바꿀 수 없습니다.
리스트는 연필로 쓰는 메모장입니다. 바꾸고 싶으면 지우개로 지우고 고칠 수 있어요. 튜플은 볼펜으로 쓴 계약서입니다. 한 번 작성하면 내용을 수정할 수 없습니다.
| 기호 | 예시 | |
|---|---|---|
| 리스트 | [ ] |
fruits = ["사과", "바나나", "포도"] |
| 튜플 | ( ) |
fruits = ("사과", "바나나", "포도") |
대괄호 [] 대신 소괄호 ()를 쓴다는 점만 빼면, 사용법은 리스트와 거의 같습니다.
print("x :", point[0])
print("y :", point[1])
y : 200
인덱스로 값을 꺼내는 것, len()으로 길이를 구하는 것, for로 순회하는 것 — 전부 리스트와 똑같이 동작합니다.
numbers[0] = 100
오류가 발생합니다. 튜플은 변하지 않는 데이터를 저장하려고 만들어졌기 때문입니다. 좌표, RGB 색상, 생년월일, 시험 날짜처럼 프로그램이 실행되는 중에 절대 바뀌면 안 되는 데이터를 저장할 때 사용합니다. 이를 불변성(Immutable)이라고 하며 개발에 있어 굉장히 중요한 개념이지만 여기서는 이정도만 보고 넘어가겠습니다.
| 항목 | 리스트 | 튜플 |
|---|---|---|
| 순서 | O | O |
| 중복 | O | O |
| 수정 / 추가 / 삭제 | O | X |
- 튜플을 만드는 기호를 쓰시오.
- 다음 코드가 20을 출력하도록 빈칸을 채우시오.
point = (10, 20)
print(point[])
정답
2. 1
- 리스트와 튜플의 가장 큰 차이점을 서술하시오.
- 다음 코드의 실행 결과를 작성하시오.
numbers = (3, 6, 9)
print(numbers[2])
정답
2. 9
세트(Set)는 중복을 허용하지 않고, 순서가 존재하지 않는 자료구조입니다.
학생 명단에 "김철수, 이영희, 박민수, 김철수, 이영희"처럼 같은 사람이 두 번 적혀 있다고 해봅시다. 중복 없이 정리하면 "김철수, 이영희, 박민수"가 되죠. 세트도 똑같습니다. 같은 값은 한 번만 저장합니다.
print(numbers)
리스트는 fruits = ["사과", "바나나", "포도"]처럼 만들면 항상 첫 번째가 "사과"였습니다. 하지만 세트는 만들 때 적은 순서와 출력 순서가 다를 수 있습니다. 그래서 인덱스(fruits[0])도 사용할 수 없어요. 애초에 "몇 번째"라는 개념 자체가 없기 때문입니다.
numbers.add(4)
print(numbers)
fruits = {"사과", "바나나", "포도"}
fruits.remove("바나나")
print(fruits)
{'사과', '포도'}
세트가 가장 많이 쓰이는 상황 중 하나가 중복 제거입니다. 리스트를 세트로 바꾸기만 해도 중복이 자동으로 사라져요.
numbers = set(numbers)
print(numbers)
다시 리스트로 되돌리고 싶다면 numbers = list(numbers)를 쓰면 됩니다.
| 항목 | 리스트 | 세트 |
|---|---|---|
| 순서 / 인덱스 | O | X |
| 중복 | O | X |
| 값 추가 | append() |
add() |
| 값 삭제 | remove(), pop() |
remove() |
{}만 써서 빈 세트를 만들려고 하면 안 됩니다. numbers = {}는 빈 딕셔너리가 됩니다. 빈 세트를 만들려면 반드시 numbers = set()이라고 써야 해요. (딕셔너리는 다음 화에서 배워요.)
정리하면 — 리스트는 순서가 중요하고 계속 값이 바뀔 때, 튜플은 절대 바뀌면 안 되는 값을 저장할 때, 세트는 중복 없이 관리해야 할 때 사용합니다.
- 다음 코드의 실행 결과를 작성하시오.
numbers = {1, 2, 2, 3}
print(len(numbers))
정답
- 세트(Set)의 두 가지 특징을 서술하시오.
- 다음 코드의 실행 결과를 작성하시오.
numbers = {1, 2, 3}
numbers.add(2)
print(len(numbers))
정답
2. 3 — 이미 있는 값 2를 다시 추가해도 세트에는 변화가 없습니다.
'Language > Python' 카테고리의 다른 글
| [고등학생부터, 파이썬] 13. 자료구조 총정리 (0) | 2026.08.20 |
|---|---|
| [고등학생부터, 파이썬] 12. 딕셔너리(Dictionary) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 10. 리스트(List) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 09. 중첩 반복문 (feat. 별찍기 예제) (0) | 2026.08.19 |
| [고등학생부터, 파이썬] 08. 반복문 for (0) | 2026.08.19 |
댓글