튜플 타입
튜플(tuple)
파이썬에서 튜플은 여러 개의 데이터를 하나로 묶는데 사용됩니다.
이러한 튜플은 리스트(list)와 거의 비슷하지만 다음과 같은 점에서 서로 다릅니다.
1. 튜플은 그 값을 변경할 수 없습니다. (immutable type)
2. 튜플은 리스트와 같은 데이터 타입에 비해 그 실행 속도가 빠릅니다.
따라서 프로그램이 실행되는 동안 그 값을 일정하게 유지해야만 하는 데이터는 튜플로 작성하는 것이 성능이 좋으며, 도중에 그 값이 변경되거나 변경될지도 모르는 데이터는 리스트로 작성하는 것이 좋습니다.
튜플 선언하기
튜플은 리스트와 마찬가지로 요소(element)를 쉼표(,)로 구분하지만, 대괄호 대신 소괄호(())로 감싸거나 아예 감싸지 않고 선언합니다.
문법
튜플명 = (요소1, 요소2, 요소3, ...)
또는
튜플명 = 요소1, 요소2, 요소3, ...
예제
tuple1 = (1, 2, 3)
tuple2 = 1, 2, 3
tuple3 = (1,)
tuple4 = (1)
print(tuple1)
print(tuple2)
print(tuple3)
print(tuple4)
실행 결과
(1, 2, 3)
(1, 2, 3)
(1,)
1
위 예제의 2번 라인처럼 파이썬에서는 소괄호(())를 사용하지 않아도 자동으로 튜플로 인식됩니다.
그리고 4번 라인처럼 하나의 요소만을 가지는 튜플은 반드시 쉼표(,)를 포함해야만 제대로 튜플로 인식됩니다. 만약 하나의 요소만을 가지는 튜플에서 쉼표를 생략하게 되면, 파이썬 프로그램은 해당 데이터를 튜플이 아닌 그냥 하나의 데이터로만 인식하게 됩니다.
튜플 사용하기
파이썬에서 튜플의 사용 방법은 그 값을 변경할 수 없다는 점을 제외하면 리스트를 사용하는 방법과 같습니다. 단, 값을 변경할 수 없기 때문에 요소를 추가하거나 삭제, 삽입, 추출하는 동작 등은 수행할 수 없습니다.
예제
tuple1 = (1, 2, 3)
tuple2 = tuple(["원", "투", "쓰리"])
# 튜플 요소 선택하기
print(tuple1[0])
print(tuple2[-1])
# 튜플 자르기
print(tuple1[1:])
print(tuple2[:2])
# 튜플끼리의 연산
print(tuple1 + tuple2)
print(tuple1 * 2)
실행 결과
1
쓰리
(2, 3)
('원', '투')
(1, 2, 3, '원', '투', '쓰리')
(1, 2, 3, 1, 2, 3)
위 예제의 1번과 2번 라인처럼 파이썬에서 튜플 타입의 데이터는 소괄호를 사용하거나 tuple() 함수를 사용해서 선언할 수 있습니다. 이때 tuple() 함수의 인수로는 순환할 수 있는 객체(iterable object)만을 사용할 수 있습니다.
또한, 튜플 타입에 한해 다음에 소개할 패킹(packing)을 이용하여 튜플을 선언할 수도 있습니다.
패킹(packing)과 언패킹(unpacking)
여러 타입의 데이터를 하나의 튜플이나 리스트로 묶어 선언하는 것을 패킹(packing)이라 하며, 하나의 튜플이나 리스트의 요소들을 여러 개의 변수에 나누어 대입하는 것을 언패킹(unpacking)이라 합니다.
이러한 언패킹은 파이썬만의 독특한 문법으로 코드를 작성할 때 매우 유용하게 사용할 수 있습니다.
예제
# 패킹(packing)
tuple1 = 10, "열", True
# 언패킹(unpacking)
a, b, c = tuple1
# a, b, c, d = tuple1
# a, b = tuple1
print(a)
print(b)
print(c)
실행 결과
10
열
True
위 예제의 2번 라인처럼 별도로 소괄호(())를 사용하지 않더라도 둘 이상의 데이터가 쉼표로 연결되어 있으면, 파이썬은 자동으로 해당 데이터들을 하나의 튜플로 패킹(packing)해 줍니다.
또한, 5번 라인처럼 둘 이상의 변수에 튜플의 각 요소들을 한 번에 언패킹(unpacking)할 수도 있습니다.
하지만 6번이나 7번 라인처럼 언패킹을 위한 변수의 개수가 튜플이나 리스트의 길이와 다를 경우에는 ValueError가 발생합니다. 따라서 언패킹을 할 때는 언제나 변수의 개수와 튜플이나 리스트의 길이가 일치하는지를 확인해야만 합니다.
특정 요소의 포함 여부
튜플이나 리스트, 세트 등에 어느 특정 요소가 포함되어 있는지를 확인하려면 in 키워드를 사용할 수 있습니다.
in 키워드를 사용한 결과 해당 데이터에 특정 요소가 포함되어 있으면 참(True)를 반환하고, 포함되어 있지 않으면 거짓(False)를 반환합니다.
예제
tuple1 = 10, "열", True
print(10 in tuple1)
print("아홉" in tuple1)
print("아홉" not in tuple1)
실행 결과
True
False
True
위 예제의 5번 라인처럼 in 키워드 앞에 not를 붙여서 사용하면, in 키워드와는 반대로 특정 요소가 포함되어 있지 않으면 참(True)를 반환하고 포함되어 있으면 거짓(False)를 반환하게 됩니다.