기본 자료형: 튜플

튜를 자료형은 리스트와 거의 같다. 다만 튜플 자료형은 한 번 생성되면 수정이 불가능하다. 즉, 앞서 리스트 인덱싱을 통해 기존 리스트의 항목을 수정할 수 있었지만 튜플의 경의 인덱싱을 통해 튜플의 항목을 확인하고 읽을 수만 있어서 수정은 불가능하다. 수정불가능성을 제외하고는 리스트와 기본적으로 동일하게 작동한다.

리스트 자료형을 나타내는 기호는 소괄호 '()'를 사용한다.

In [1]:
my_list = [1, 2]   # 리스트
my_tuple = (1, 2)  # 튜플

수정 가능성

리스트는 인덱싱을 통해 특정 인덱스의 항목 수정이 가능하다.

In [2]:
my_list[-1] = 3
print(my_list)
[1, 3]

반면에 튜플의 경우 수정을 시도하면 오류가 발생한다.

In [3]:
try:
    my_tuple[1] = 3
except TypeError:
    print("튜플은 수정할 수 없어요.")
튜플은 수정할 수 없어요.

인덱싱을 통해 항목을 확인하여 활용할 수는 있다.

In [4]:
x1 = my_tuple[0]
print(x1)
1

소괄호 없이 쉼표(comma, 콤마)를 이용하여 항목을 나열해도 튜플로 인식된다.

In [5]:
other_tuple = 3, 4
type(other_tuple)
Out[5]:
tuple

함수 반환값과 튜플 해체

함수는 실행과정에서 하나의 값만 반환할 수 있다. 하지만 튜플을 사용하면 여러 개의 값을 동시에 반환할 수 있다.

In [6]:
def sum_and_product(x, y):
    return (x + y), (x * y)

sp = sum_and_product(2, 3)
s, p = sum_and_product(2, 3)

print(f"sp = {sp}", f"s  = {s}", f"p  = {p}", sep='\n')
sp = (5, 6)
s  = 5
p  = 6

변수 다중 할당

여러 개의 변수에 동시에 값을 할당하며 변수를 선언할 수 있다.

In [7]:
x, y, z = 1, 2, 3
print(f"x = {x}", f"y = {y}", f"z = {z}", sep='\n')
x = 1
y = 2
z = 3

두 개 이상의 변수에 할당된 값들을 아래와 같이 교환할 수 있다.

In [8]:
x, y, z = z, y, x
In [9]:
print(f"x = {x}", f"y = {y}", f"z = {z}", sep='\n')
x = 3
y = 2
z = 1

주의: 위 교환방식은 파이썬과 최신 버전의 Javascript에서는 지원되지만 예를 들어 C, Java 에서는 지원되지 않는다.