Development Tip

Python 강좌 05 - Tuple

MoonLight314 2024. 12. 23. 11:04
728x90

안녕하세요, 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)
​
728x90

'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