[Python] 튜플(Tuple)

hengu·2026년 1월 12일

📘 튜플이란?

  • 여러 개의 값을 하나의 변수에 담는 불변 자료형
  • () 소괄호로 묶어서 저장
  • 요소의 순서가 있고, 중복 허용
  • 각 항목은 인덱스로 접근 (0부터 시작)
  • 값을 추가, 수정, 삭제할 수 없음 (불변성)
  • 다양한 데이터 타입을 포함
  • 값이 변경되면 안되는 데이터에 적합
t1 = ()
t2 = (1, )    # 1개의 값만 있는 튜플은 반드시 쉼표를 붙여야 함
t3 = (1, 2)
t4 = 1, 2     # 소괄호를 생략해도 됨
t5 = ('x', 'y', ('xy', 'zz'))  # 중첩 튜플

🔎 튜플 다루기

1. 튜플 생성

1-1. () 괄호를 사용한 생성

# 숫자형 튜플
numbers = (1, 2, 3)

# 문자열 튜플
fruits = ('apple', 'banana', 'cherry')

# 다양한 데이터 타입을 포함한 튜플
mixed = (1, 'apple', 3.14, True)

print(numbers)  # >>> (1, 2, 3)
print(fruits)   # >>> ('apple', 'banana', 'cherry')
print(mixed)    # >>> (1, 'apple', 3.14, True)

1-2. 괄호 없이 생성 (튜플 패킹)

my_tuple = 1, 2, 3
print(my_tuple)        # >>> (1, 2, 3)
print(type(my_tuple))  # >>> <class 'tuple'>

1-3. 단일 요소 튜플 생성 시 주의점

  • 요소가 하나뿐인 튜플을 생성할 때는 ,를 반드시 포함해야함
single_element = (5,)
print(single_element)        # >>> (5,)
print(type(single_element))  # >>> <class 'tuple'>

# 쉼표가 없으면 일반 값으로 인식
not_a_tuple = (5)
print(type(not_a_tuple))  # >>> <class 'int'>

1-4. tuple() 함수를 사용한 생성

# 리스트를 튜플로 변환
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(my_tuple)  # >>> (1, 2, 3)

# 문자열을 튜플로 변환
# 문자열을 튜플로 변환하면 문자 하나씩 분리됨
string = 'hello'
char_tuple = tuple(string)
print(char_tuple)  # >>> ('h', 'e', 'l', 'l', 'o')

2. 튜플의 인덱싱

  • 인덱스를 사용하여 튜플의 특정 위치에 있는 요소에 접근할 수 있음
  • 인덱스는 0부터 시작, 음수를 사용하면 뒤에서부터 접근
eng = ('a', 'b', 'c', 'd')

print(eng[0])    # >>> a
print(eng[2])    # >>> c
print(eng[-1])	 # >>> d
print(eng[-2])  # >>> c

3. 튜플의 슬라이싱

  • 튜플의 일부를 잘라내어 새로운 튜플을 만드는 방법
  • 문법은 리스트의 슬라이싱과 동일
nums = (0, 1, 2, 3, 4, 5, 6)

print(nums[2:5])    # >>> (2, 3, 4)
print(nums[:3])     # >>> (0, 1, 2)
print(nums[4:])		# >>> (4, 5, 6)
print(nums[::2])    # >>> (0, 2, 4, 6)
print(nums[::-1])   # >>> (6, 5, 4, 3, 2, 1, 0)

4. 튜플의 불변성

  • 튜플은 불변 자료형으로, 생성된 후에는 요소를 변경할 수 없음
# 요소 변경 불가
tup1 = (1, 2, 3)

tup1[0] = 10    
 # >>> TypeError: 'tuple' object does not support item assignment
 
# 요소 추가 및 삭제 불가
tup1 += (4, )    # 새로운 튜플을 생성하여 tup1에 할당
print(tup1)		 # tup1은 새로운 튜플이 된 것
 # >>> (1, 2, 3, 4)

# 그러나 원본 튜플은 변경되지 않음
og_tup = (1, 2, 3)
new_tup = og_tup + (4, )
print(og_tup)    # >>> (1, 2, 3)
print(new_tup)   # >>> (1, 2, 3, 4)

5. 튜플 메서드

  • 튜플은 불변성이 있어 사용 가능한 메서드가 제한적임

5-1. count(item)

  • 튜플에서 특정 요소의 개수를 반환
nums = (1, 2, 2, 3, 3, 3)
print(nums.count(2))  # >>> 2
print(nums.count(3))  # >>> 3

5-2. index(item)

  • 튜플에서 첫 번째로 일치하는 요소의 인덱스를 반환
fruits = ('banana', 'cherry', 'mango')
print(fruits.index('banana'))  # >>> 0

6. 변수의 패킹과 언패킹

6-1. 패킹

  • 여러 개의 값을 하나의 튜플로 묶는 것
packed_tup = 1, 2, 3
print(packed_tup)  # >>> (1, 2, 3)

6-2. 언패킹

  • 튜플의 요소를 여러 개의 변수에 할당하는 것
packed_tup = 1, 2, 3
a, b, c = packed_tup
print(a)  # >>> 1
print(b)  # >>> 2
print(c)  # >>> 3

# 자주 쓰는 패턴
# `*` 언패킹 변수는 항상 리스트로 값을 받음
a, b, *rest = (1, 2, 3, 4, 5)
print(rest)  # >>> [3, 4, 5]
print(type(rest))  # >>> <class 'list'>

a, *mid, c = (1, 2, 3, 4, 5)
print(mid)  # >>> [2, 3, 4]

7. 중첩 튜플

  • 튜플 안에 튜플을 요소로 가질 수 있음
nested_tup = (1, (2, 3), (4, (5, 6)))
print(nested_tup[1])        # >>> (2, 3)
print(nested_tup[2][1])     # >>> (5, 6)
print(nested_tup[2][1][0])  # >>> 5

8. 튜플의 반복문 활용

  • 튜플의 각 요소에 접근하거나 처리하기 위해 반복문 사용 가능

8-1. for 루프

fruits = ('banana', 'cherry', 'mango')

for f in fruits:
	print(f)

8-2. 인덱스와 함께 반복하기

fruits = ('banana', 'cherry', 'mango')

for index, value in enumerate(fruits):
	print(f'인덱스 {index}: {value}')

9. 튜플의 비교와 정렬

  • 튜플은 요소별로 비교할 수 있으며, 정렬된 시퀀스를 필요로 하는 경우에 유용

9-1. 튜플의 비교

tup1 = (1, 2, 3)
tup2 = (1, 2, 4)

print(tup1 < tup2)  # >>> True

9-2. 튜플의 정렬

  • 튜플의 리스트를 정렬할 수 있음
students = [('Alice', 'A', 15), ('Bob', 'B', 12), ('Cali', 'C', 10)]

# 나이를 기준으로 정렬
students_sorted = sorted(students, key=lambda student: student[2])
print(students_sorted)
 # >>> [('Cali', 'C', 10), ('Bob', 'B', 12), ('Alice', 'A', 15)]

10. 튜플의 활용

10-1. 딕셔너리의 키로 사용

  • 튜플은 불변성이 있기 때문에 딕셔너리의 키로 사용할 수 있음
my_dict = {(1, 2): "P1", (3, 4): "P2"}
print(my_dict[(1, 2)])  # >>> P1

10-2. 두 변수의 값 교환

  • 튜플의 언패킹을 이용하여 두 변수의 값을 교환할 수 있음
a = 10
b = 20
a, b = b, a

print(a)  # >>> 20
print(b)  # >>> 10

10-3. 리스트와의 상호 변환

  • 튜플과 리스트는 상호 변환이 가능
my_tup = (1, 2, 3)
my_list = list(my_tup)
print(my_list)     # >>> [1, 2, 3]

my_new_tup = tuple(my_list)
print(my_new_tup)  # >>> (1, 2, 3)

10-4. 여러 변수에 동일한 값 할당

x = y = z = 0
print(x, y, z)  # >>> 0 0 0

⚙️ 튜플과 리스트의 차이점

  • 튜플은 리스트보다 메모리 사용이 적고, 약간 더 빠름
    | 특징 | 튜플 | 리스트 |
    | --- | --- | --- |
    | 기호 | () 또는 생략 | [] |
    | 변경 가능성 | 불변 | 변경 가능 |
    | 요소 추가/삭제 | 불가능 | 가능 |
    | 사용 사례 | 변경이 불가능한 데이터, 키로 사용 | 데이터 조작이 필요한 경우 |
profile
안낭하삽나까

0개의 댓글