오늘은 튜플이라는 자료형이 어떤 쓸모가 있는지 알아보도록 하죠. 리스트와 비슷한 자료형이라는 정도만 알고 시작해 봅시다.
다른 언어를 공부해 보신 분은 두 변수의 값을 서로 바꾸어 본 적이 있으실 텐데요, 보통 다음과 같은 방법을 사용합니다.
>>> a = 10 >>> b = 20 >>> temp = a # store a to temp (temp = 10) >>> a = b # store b to a (a = 20) >>> b = temp # store temp to b (b = 10) >>> print(a, b) 20 10
이렇게 두 변수 값을 맞바꾸기 위해선 또 다른 변수 temp
가 필요합니다. 좀 번거롭죠? 변수가 많을수록 더 귀찮아질 테구요. 그런데 파이썬에는 이런 일을 간단하게 할 수 있는 기막힌 방법이 있습니다.
>>> c = 10 >>> d = 20 >>> c, d = d, c >>> print(c, d) 20 10
너무 간단하지요?
세 번째 줄에서 등호 왼쪽은 c
, d
라는 변수가 담긴 튜플이구요, 오른쪽은d
와 c
의 값이 담긴 튜플입니다. 그래서 d
의 값은 c
로 들어가고, c
의 값은 d
로 들어갑니다. 이런 일들이 차례차례 일어나는 것이 아니고, 동시에 처리된다는군요.
이번엔 함수에서 튜플이 요긴하게 쓰이는 것을 보여드리지요. 아래의 함수는 인자(매개변수)를 주는 대로 받아먹는 함수입니다.
>>> def magu_print(x, y, *rest): ... print(x, y, rest) ... >>> magu_print(1, 2, 3, 5, 6, 7, 9, 10) 1 2 (3, 5, 6, 7, 9, 10)
위 함수는 인자를 두 개 이상만 주면 나머진 다 알아서 처리한답니다. 함수를 정의할 때 인자에 별표를 붙여두면 그 이후에 들어오는 것은 모두 튜플에 집어넣는 것이죠. 위에선 (3, 5, 6, 7, 9, 10)
가 하나의 튜플로 묶였습니다. 꽤 쓸만할 것 같죠? 다른 언어로 이런 함수를 만들려면 고생 꽤나 해야 할 거예요. 인자를 두 개, 세 개 넣어서도 실험해 보세요.
튜플의 좋은 점들을 구경했으니 이제 문법을 살펴봅시다.
>>> t = ('a', 'b', 'c')
튜플을 만들 때는 위와 같이 괄호를 써도 되고 안 써도 됩니다. 다만, 원소가 없는 튜플을 만들 때는 괄호를 꼭 써주세요.
>>> empty = ()
원소를 하나만 가진 튜플을 만들 땐 원소 뒤에 콤마(,
)를 꼭 찍어주시고요.
>>> one = 5, >>> one (5,)
그리고 튜플은 리스트와 달리 원소값을 직접 바꿀 수 없기 때문에, 문자열에서 했던 것처럼 오려붙이는 방법을 써야 한다는 것을 알아두세요.
>>> p = (1,2,3) >>> q = p[:1] + (5,) + p[2:] >>> q (1, 5, 3) >>> r = p[:1], 5, p[2:] >>> r ((1,), 5, (3,))
튜플을 리스트로, 리스트를 튜플로 쉽게 바꿀 수도 있답니다.
>>> p = (1, 2, 3) >>> q = list(p) # make list q with tuple p >>> q [1, 2, 3] >>> r = tuple(q) # make tuple r with list q >>> r (1, 2, 3)