[파이썬] 튜플의 두 가지 사용 방식
#Programming Language#Python

[파이썬] 튜플의 두 가지 사용 방식

튜플(Tuple)은 파이썬의 기본 데이터 구조 중 하나로, 불변성(immutable)을 가진 시퀀스 타입입니다. 튜플의 이중 역할은 다소 간과될 수 있지만, 파이썬 프로그래밍에서 중요한 개념입니다. 튜플은 크게 두 가지 방식으로 사용됩니다: 레코드로서의 사용과 불변 리스트로서의 사용입니다.

레코드로서의 튜플

튜플의 한 가지 사용 방법은 레코드(record)로 사용하는 것입니다. 이 경우, 튜플의 각 요소는 레코드의 필드 하나를 나타내며, 각 요소의 위치가 의미를 가집니다. 레코드로 사용될 때, 튜플은 다양한 데이터 필드를 하나의 변수로 묶어 처리할 수 있게 해 줍니다. 이때 각 요소에 접근할 때는 인덱스를 사용하거나, 더 나은 방법으로는 언패킹(unpacking)을 사용할 수 있습니다.

# 레코드로서의 튜플 사용 예시
person = ('John', 'Doe', 30)
name, surname, age = person

레코드로서의 튜플 사용 시 주의할 점은, 튜플의 요소에 접근할 때 인덱스를 사용하는 것이 코드의 가독성을 해칠 수 있다는 것입니다. 인덱스 대신 명시적인 이름을 사용하고 싶다면, collections.namedtuple이나 typing.NamedTuple을 사용하는 것이 더 좋은 방법일 수 있습니다.

불변 리스트로서의 튜플

리스트와 마찬가지로 튜플도 다양한 타입의 데이터를 순서대로 저장할 수 있는 시퀀스 타입입니다. 하지만 튜플은 한 번 생성되면 그 내용을 변경할 수 없습니다. 이러한 불변성 때문에 튜플은 실행 시간에 안전하며, 해시 가능(hashable)하다는 특징을 가집니다. 따라서 튜플은 딕셔너리의 키나 세트의 원소로 사용될 수 있습니다.

예를 들어, 여러 값을 묶어서 하나의 변수에 저장하거나 함수에서 여러 값을 한 번에 반환할 때 튜플을 활용할 수 있습니다.

# 여러 변수에 한 번에 값 할당하기
a, b = (1, 2)
 
# 함수에서 여러 값을 반환하기
def minmax(items):
    return min(items), max(items)

튜플 자체는 불변이지만, 튜플이 포함하고 있는 객체가 가변(mutable)이라면 그 객체의 내용은 변경될 수 있습니다. 또, 앞서 튜플이 해시 가능하다고 언급했지만 이는 튜플의 모든 요소가 해시 가능할 때만 해당됩니다. 만약 튜플이 리스트와 같은 가변 객체를 포함하고 있다면, 그 튜플은 해시 불가능합니다.

t = ([1, 2, 3], 'hello')
t[0].append(4)  # 이는 가능합니다. t는 여전히 같은 리스트 객체를 참조하고 있지만, 그 리스트의 내용이 변경되었습니다.
# t = ([1, 2, 3, 4], 'hello')
 
t1 = (1, 2, 3)  # 해시 가능
t2 = ([1, 2], 3)  # 해시 불가능

튜플은 리스트의 일부 메서드를 지원하지만, 리스트를 변경하는 메서드(예: append, extend, insert 등)는 지원하지 않습니다. 따라서 튜플을 사용할 때 이 점에 주의하면 리스트와 유사한 API로 사용할 수 있습니다.