이 포스트에서는 파이썬에서 사용되는 튜플이라는 개념에 대해 설명합니다.
파이썬의 배열에는 리스트, 딕셔너리, 튜플 이렇게 세 가지 종류가 있습니다. 리스트는 ["ABC", "DEF", "GHI"]
처럼 그냥 일반적인 배열이고 딕셔너리는 {"name": "홍길동", "age": 20}
이런 식으로 키값이 있는 배열입니다. 튜플은 리스트와 비슷하지만 다른 점이 있습니다.
먼저 아래 코드를 봅시다.
GFRIEND = ["소원", "예린", "은하", "유주", "신비", "엄지"] TWICE = ["나연", "정연", "모모", "사나", "지효", "미나", "다현", "채영", "쯔위"] print("GFRIEND: %s" % ', '.join(GFRIEND) ) print("TWICE: %s" % ', '.join(TWICE) )
또, 다음 코드를 봅시다.
GFRIEND = ("소원", "예린", "은하", "유주", "신비", "엄지") TWICE = ("나연", "정연", "모모", "사나", "지효", "미나", "다현", "채영", "쯔위") print("GFRIEND: %s" % ', '.join(GFRIEND) ) print("TWICE: %s" % ', '.join(TWICE) )
두 코드를 보면 배열 선언이 다르게 되어 있습니다. 하나는 사각괄호로 감싸져 있고 다른 하나는 일반 소괄호로 감싸져 있습니다. 사각괄호로 감싼 것은 리스트, 일반 소괄호로 감싼 것은 튜플입니다.
위 두 코드는 다음과 같이 출력됩니다.
GFRIEND: 소원, 예린, 은하, 유주, 신비, 엄지 TWICE: 나연, 정연, 모모, 사나, 지효, 미나, 다현, 채영, 쯔위
리스트와 튜플 모두 배열의 성질을 갖고 있어서 리스트를 선언한 앞의 코드와 튜플로 선언한 뒤의 코드가 서로 같은 결과가 출력됩니다.
일단 이렇게만 본다면 똑같아 보이지만, 다른 점이 있습니다. 먼저, 다음 코드를 봅시다.
GFRIEND = ["소원", "예린", "은하", "유주", "신비", "엄지"] TWICE = ["나연", "정연", "모모", "사나", "지효", "미나", "다현", "채영", "쯔위"] GFRIEND[5], TWICE[5] = TWICE[5], GFRIEND[5] TWICE.pop() print("GFRIEND: %s" % ', '.join(GFRIEND) ) print("TWICE: %s" % ', '.join(TWICE) )
4번과 5번 줄이 추가되었는데요. 4번 줄은 배열 GFRIEND[5]와 TWICE[5]의 값을 스와핑하고, 5번 줄에서는 TWICE의 마지막 값을 제거합니다. 그 결과,
GFRIEND: 소원, 예린, 은하, 유주, 신비, 미나 TWICE: 나연, 정연, 모모, 사나, 지효, 엄지, 다현, 채영
GFRIEND에 있어야 할 엄지와 TWICE에 있어야 할 미나의 자리가 서로 바뀌고 쯔위가 TWICE에서 사라졌습니다. 왜 그런 것일까요? 당연히 리스트는 가변성이 있기 때문입니다. 그래서 리스트에서 일부 값을 다른 값으로 바꾸거나 새로운 값을 추가 또는 삭제할 수 있습니다.
그렇지만 튜플에서는 이런 일이 일어나지 않습니다. 다음 코드를 봅시다.
GFRIEND = ("소원", "예린", "은하", "유주", "신비", "엄지") TWICE = ("나연", "정연", "모모", "사나", "지효", "미나", "다현", "채영", "쯔위") GFRIEND[5], TWICE[5] = TWICE[5], GFRIEND[5] TWICE.pop() print("GFRIEND: %s" % ', '.join(GFRIEND) ) print("TWICE: %s" % ', '.join(TWICE) )
이를 실행해 보면,
Traceback (most recent call last): File "python", line 4, in <module> TypeError: 'tuple' object does not support item assignment
이렇게 오류를 일으키는 것을 볼 수 있을 것입니다. 이것이 튜플이 리스트와 확실히 다른 점으로, 튜플의 불가변성입니다. 즉, 튜플이 선언된 변수에 다른 값을 덮어씌워서 통째로 바꿀 수는 있을지언정 튜플의 일부 값을 변경하거나 추가 및 삭제는 불가능합니다.
따라서, 상황에 맞게 리스트와 튜플 중에서 선택하면 됩니다.
참고: 튜플은 소괄호를 생략할 수도 있습니다. 즉,
>>> 1, 2, 3 (1, 2, 3)
이렇게 소괄호 없이 써도 콤마로 이어져 있다면 튜플로 인식합니다.
>>> (1) 1 >>> (1,) (1,)
하지만 소괄호가 있더라도 콤마를 찍지 않고 그냥 하나의 값만 쓰면 단독 값으로 인식하므로 원소가 하나인 튜플을 선언하려면 그 값의 끝에 콤마를 찍어서 선언합니다.