안녕하세요, MoonLight입니다.
이번 Post에서는 Python의 Tuple에 대해서 알아보도록 하겠습니다.
1. 기본 사항
Tuple(Tuple)은 Python에서 변경할 수 없는(immutable) 순서가 있는 집합입니다.
List와 비슷하지만, 수정이 불가능한 점에서 다릅니다.
이는 불변성 때문에 여러 가지 장점이 있습니다.
예를 들어, 해시 가능한 객체로 사용할 수 있어서 Dictionary의 키로 사용될 수 있습니다.
1.1. Tuple의 기본 구조
Tuple은 소괄호 ()를 사용하여 정의하며, 쉼표로 구분된 요소들을 포함합니다.
# Tuple 선언
my_tuple = (1, 2, 3)
print(my_tuple)
출력:
(1, 2, 3)
1.2. Tuple의 특징
불변성(Immutable) : Tuple은 한 번 생성된 후 수정할 수 없습니다. 요소를 추가하거나 삭제할 수 없습니다.
순서가 있음 : List처럼 Tuple도 순서가 있어, Index를 통해 각 요소에 접근할 수 있습니다.
다양한 자료형을 포함 : Tuple은 다양한 자료형의 값을 가질 수 있습니다.
중복 가능 : Tuple 내에 중복된 요소가 있을 수 있습니다.
1.3. Tuple 생성
1.3.1. 기본 Tuple
# 숫자, 문자, 불린 값 등을 포함하는 Tuple
my_tuple = (1, 2, 3, 4)
print(my_tuple)
출력:
(1, 2, 3, 4)
1.3.2. 하나의 요소를 가진 Tuple
하나의 요소를 가진 Tuple을 만들 때는 뒤에 쉼표를 추가해야 합니다.
single_element_tuple = (5,) # 쉼표가 있어야 Tuple로 인식됨
print(single_element_tuple)
출력:
(5)
만약 쉼표를 빼면 단순히 숫자 5로 인식됩니다:
not_a_tuple = (5)
print(not_a_tuple)
출력:
5 (Tuple이 아님)
1.3.3. 비어 있는 Tuple
empty_tuple = () # 빈 Tuple
print(empty_tuple)
출력:
()
1.3.4. 여러 자료형을 포함한 Tuple
Tuple은 숫자, 문자열, List 등 다양한 자료형을 포함할 수 있습니다.
mixed_tuple = (1, "apple", 3.14, [1, 2, 3], True)
print(mixed_tuple)
출력:
(1, 'apple', 3.14, [1, 2, 3], True)
1.4. Tuple의 요소에 접근하기
Tuple 내의 요소는 Indexing을 통해 접근할 수 있습니다. Tuple은 0부터 시작하는 Index를 가집니다.
my_tuple = (10, 20, 30, 40)
# 첫 번째 요소
print(my_tuple[0])
출력:
10
# 마지막 요소
print(my_tuple[-1])
출력:
40 (음수 Index는 뒤에서부터 시작)
# 범위 Slicing
print(my_tuple[1:3])
출력:
(20, 30)
1.5. Tuple의 수정 및 변경
Tuple은 불변(immutable)이므로, 생성 후 요소를 변경하거나 삭제할 수 없습니다. 예를 들어, 다음과 같은 코드는 오류를 발생시킵니다:
my_tuple = (1, 2, 3)
# 오류 발생: Tuple은 불변이므로 수정할 수 없습니다
# my_tuple[1] = 5
TypeError: 'tuple' object does not support item assignment
하지만 Tuple 내부에 가변 객체가 포함되어 있다면, 그 객체는 수정 가능합니다.
my_tuple = (1, [2, 3], 4)
# List는 가변 객체이므로 수정 가능
my_tuple[1][0] = 99
print(my_tuple)
출력:
(1, [99, 3], 4)
1.6. Tuple 연산
1.6.1. Tuple 덧셈 (Concatenation)
두 개 이상의 Tuple을 덧셈 연산자 +를 사용하여 결합할 수 있습니다.
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
result = tuple1 + tuple2
print(result)
출력:
(1, 2, 3, 4, 5, 6)
1.6.2. Tuple 반복 (Repetition)
Tuple을 곱셈 연산자 *로 반복할 수 있습니다.
tuple1 = (1, 2, 3)
# Tuple을 3번 반복
result = tuple1 * 3
print(result)
출력:
(1, 2, 3, 1, 2, 3, 1, 2, 3)
1.7. Tuple의 내장 메서드
Tuple에는 List와 비슷하게 몇 가지 내장 메서드가 있지만, Tuple의 불변성 때문에 append(), remove() 등의 수정 메서드는 사용할 수 없습니다.
1.7.1. count()
Tuple 내에서 특정 값이 몇 번 나오는지 세는 메서드입니다.
my_tuple = (1, 2, 3, 2, 2, 4)
# 값 '2'의 개수
print(my_tuple.count(2))
출력:
3
1.7.2. index()
Tuple 내에서 특정 값의 첫 번째 Index를 반환합니다.
my_tuple = (10, 20, 30, 20, 40)
# 값 '20'의 첫 번째 Index
print(my_tuple.index(20))
출력:
1
1.8. Tuple을 List로 변환하기
Tuple은 불변 객체이므로, 변경이 필요하다면 List로 변환할 수 있습니다.
my_tuple = (1, 2, 3)
# Tuple을 List로 변환
my_list = list(my_tuple)
print(my_list)
출력:
[1, 2, 3]
1.9. Tuple을 사용할 때의 장점
불변성(Immutable) : Tuple은 불변이기 때문에, 수정되지 않아 데이터를 안전하게 보호할 수 있습니다.
성능 : List보다 빠릅니다. 특히, 데이터가 변경되지 않으므로 더 효율적으로 메모리를 사용합니다.
해시 가능 : Tuple은 불변이므로 Dictionary의 키로 사용할 수 있습니다. 반면, List는 해시 가능하지 않습니다.
my_dict = {("apple", "banana"): 10}
print(my_dict[("apple", "banana")])
출력:
10
1.10. Tuple을 사용하는 예시
1.10.1. 다중 반환값
함수에서 여러 값을 반환할 때 Tuple을 사용하면 유용합니다.
def get_coordinates():
return (10, 20)
x, y = get_coordinates()
print(x, y)
출력:
10 20
1.10.2. 불변 데이터
프로그램에서 변경되지 않는 데이터(예: 좌표, 날짜 등)를 저장할 때 튜플을 사용하여 데이터를 안전하게 보호할 수 있습니다.
coordinate = (12.34, 56.78)
1.11. 요약
- Tuple은 불변 객체로, 값이 변경되지 않도록 보장합니다.
- List와 비교하여 더 빠르고 메모리 효율적입니다.
- 다양한 자료형을 포함할 수 있으며, Indexing과 Slicing을 지원합니다.
- 다중 반환값과 불변 데이터를 처리할 때 유용하게 사용됩니다.
- Tuple은 데이터를 변경할 필요가 없고, 안전하게 관리해야 하는 경우에 적합한 자료형입니다.
2. 예제
Ex. 1. my_variable 이름의 비어있는 Tuple을 만들라.
my_variable = ()
print(type(my_variable))
출력:
<class 'tuple'>
Ex. 2. 2016년 11월 영화 예매 순위 기준 top3는 다음과 같다.
영화 제목을 movie_rank 이름의 Tuple에 저장하라. (순위 정보는 저장하지 않는다.)
순위
|
영화
|
1
|
닥터 스트레인지
|
2
|
스플릿
|
3
|
럭키
|
movie_rank = ("닥터 스트레인지","스플릿","럭키")
print(movie_rank)
출력:
('닥터 스트레인지', '스플릿', '럭키')
괄호를 이용해서 감싸면 Tuple로 인식하게 됩니다.
Ex. 3. 숫자 1 이 저장된 Tuple을 생성하라.
one = (1,)
print(one)
출력:
1
Ex. 4. 다음 코드를 실행해보고 오류가 발생하는 원인을 설명하라.
t = (1, 2, 3)
t[0] = 'a'
"""
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
t[0] = 'a'
TypeError: 'tuple' object does not support item assignment
"""
tuple은 원소(element)의 값을 변경할 수 없습니다.
Ex. 5. 아래와 같이 t에는 1, 2, 3, 4 데이터가 바인딩되어 있다. t가 바인딩하는 데이터 타입은 무엇인가?
t = 1, 2, 3, 4
print(type(t))
출력:
<class 'tuple'>
Ex. 6. 변수 t에는 아래와 같은 값이 저장되어 있다. 변수 t가 ('A', 'b', 'c') Tuple을 가리키도록 수정 하라.
t = ('a', 'b', 'c')
Tuple의 값은 변경할 수 없기 때문에, List와 달리 아래 코드는 동작하지 않습니다.
t[0] = 'A'
새로운 Tuple을 만들고 t 라는 변수를 업데이트 해야 합니다. 기존의 Tuple ('a', 'b', 'c')은 자동으로 삭제됩니다.
t = ('A', 'b', 'c')
Ex. 7. 다음 Tuple을 List로 변환하라.
interest = ('삼성전자', 'LG전자', 'SK Hynix')
interest = ('삼성전자', 'LG전자', 'SK Hynix')
interest = list(interest)
print(type(interest))
print(interest)
출력:
<class 'list'>
['삼성전자', 'LG전자', 'SK Hynix']
Ex. 8. 다음 List를 Tuple로 변경하라.
interest = ['삼성전자', 'LG전자', 'SK Hynix']
interest = ['삼성전자', 'LG전자', 'SK Hynix']
interest = tuple(interest)
print(interest)
출력:
('삼성전자', 'LG전자', 'SK Hynix')
List와 Tuple은 상호 변환이 가능합니다.
Ex. 9. 다음 코드의 실행 결과를 예상하라.
temp = ('apple', 'banana', 'cake')
a, b, c = temp
print(a, b, c)
출력:
apple banana cake
이와 같이 Tuple을 변수에 할당하는 동작을 Unpacking이라고 하고, List나 Dictionary에서도 가능합니다.
Ex. 10. 1 부터 99까지의 정수 중 짝수만 저장된 Tuple을 생성하라.
(2, 4, 6, 8 ... 98)
even = tuple(range(2,99,2))
print(even)
출력:
(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98)
도움이 되셨으면 좋겠네요.
다른 강좌도 참고하시면 좋을 것 같습니다. 각 강좌의 Link는 아래를 참고하시기 바랍니다.
Python 강좌 01 - print()
Python 강좌 02 - 변수
Python 강좌 03 - 문자열
Python 강좌 04 - List
Python 강좌 05 - Tuple
Python 강좌 06 - Dictionary
Python 강좌 07 - 분기문
Python 강좌 08 - 반복문
Python 강좌 09 - 함수
Python 강좌 10 - Module
Python 강좌 11 - Class
Python 강좌 12 - File & Exception
'Development Tip' 카테고리의 다른 글
Python 강좌 07 - 분기문 (0) | 2024.12.23 |
---|---|
Python 강좌 06 - Dictionary (0) | 2024.12.23 |
Python 강좌 04 - List (0) | 2024.12.23 |
Python 강좌 03 - 문자열 (0) | 2024.12.23 |
Python 강좌 02 - 변수 (0) | 2024.12.23 |