본문 바로가기
Python

파이썬 튜플 tuple 객체에 대한 개념과 특징

by 산코디 2024. 5. 17.

튜플(tuple)은 파이썬에서 널리 사용되는 자료구조 유형 중 하나다. 배열과 유사하지만 구조가 다르고, 이로 인해 사용법도 차이가 있다. 파이썬에서 많이 사용되는 튜플은 어떤 특징이 있는지 하나씩 정리해 보자.




튜플의 유래

튜플(tuple)이라는 용어는 영어로 tuple로 발음되며, 라틴어 tupla에서 파생되었다.
tupla는 “말랑말랑한 뭉툭한 것”이라는 뜻을 의미하는데, 이는 파이썬의 튜플이 여러 값을 그룹화하여 하나의 묶음으로 만든다는 개념을 가지고 있다.

파이썬에서 tuple이라는 용어는 1980년대 초반에 개발된 파이썬 프로그래밍 언어에서 처음 사용되었다. 튜플은 리스트와 유사하게 여러 값을 담을 수 있는 자료구조로서 특히 불변(immutable)하다는 특성을 가지고 있다.

튜플이라는 용어는 파이썬에서 값의 불변성을 강조하고, 여러 값을 그룹화하는 데 사용된다는 의미를 가지고 있다. 이러한 특성은 파이썬의 철학과 설계 원칙에 부합하다고 볼 수 있다.




튜플의 개념

파이썬의 튜플은 여러 값을 담을 수 있는 자료구조 중 하나이며, 리스트와 유사하지만 여러 가지 차이점과 특징을 가지고 있다. 특징들을 살펴보고 다양한 활용 사례를 통해 하나씩 정리해 보자.


불변성 (immutable)
튜플은 한 번 생성되면 내부 요소를 변경할 수 없다. 이러한 특징은 튜플로 생성된 데이터가 변경되지 않도록 보장하고, 안전하게 전달 및 공유될 수 있도록 한다.

순서
튜플은 요소들의 순서를 가지고 있는데, 인덱스를 사용하여 각 인덱스에 해당하는 요소에 접근할 수 있다.

다양한 자료형
튜플 내부에서는 서로 다른 자료형의 요소들을 함께 포함할 수 있다.

소괄호() 사용
튜플은 소괄호()를 사용하여 값을 생성한다.

인덱싱과 슬라이싱
리스트와 마찬가지로 튜플 역시 인덱싱과 슬라이싱을 통해 요소에 접근하거나 일부를 추출할 수 있다.

튜플 언패킹
튜플은 여러 변수에 한 번에 값을 할당하는 튜플 언패킹 기능을 지원한다.


정리한 바와 같이 튜플은 변경되지 않아야 할 데이터를 다룰 때 사용하기에 적합하며, 함수의 반환 값이나 여라 값을 그룹화하여 반환할 때 유용하게 활용할 수 있다.




튜플의 활용

튜플은 간단한 작업부터 다양하게 활용할 수 있다. 간단한 예제를 통해서 하나씩 정리해 보자.


좌표 데이터

point_2d = (3, 5)
point_3d = (1, 2, 4)

위와 같이 2차원, 3차원 좌표형 데이터를 저장하고 관리할 때에 튜플 구조로 유용하게 사용할 수 있다.

함수의 반환

def get_user_info():
    name = "test"
    age = 30
    email = "test@example.com"
    return name, age, email

user_info = get_user_info()
print(user_info)  
# ('test', 30, 'test@example.com')

함수를 사용하여 반환하는 경우 위와 같이 간단하게 튜플 구조로 데이터를 반환시켜 줄 수 있다. 위의 함수는 유저의 기본 정보를 반환해 주는 함수이며, 호출하게 되면 이름, 나이, 이메일 순으로 튜플 구조로 생성하여 반환하게 된다. 이렇게 함수에서도 간단하게 활용할 수 있다.

딕셔너리의 키

employee_info = {
    ('Test', 30): "Developer",
    ('John', 25): "Designer",
}

print(employee_info[('Test', 30)])  
# Developer

위의 코드는 딕셔너리 구조에서 key값이 튜플 구조로 구성되어 있는 예제다. 위와 같이 특정 키의 값을 조회하고자 할 때, employee_info[('Test', 30)]와 같이 튜플을 기준으로 조회할 수 있다.

해시 가능한 (hashable) 객체

unique_values = {('a', 'b'), ('c', 'd'), ('a', 'b')}
print(unique_values)  
# {('c', 'd'), ('a', 'b')}

위의 코드는 Set을 사용하여 고유한 값을 저장하는 예제다. 여기서 튜플 구조로 값을 세팅하게 되면 Set의 특성에 따라 중복되는 값은 제거되고 고유한 값만 생성되게 한다.

튜플 요소 정렬

sorted_data = sorted([('b', 3), ('a', 1), ('c', 2)])
print(sorted_data)  
# [('a', 1), ('b', 3), ('c', 2)]

위의 코드는 튜플 구조로 된 리스트를 정렬하는 예제다. 간단하게 sorted() 함수를 사용한다면 오름차순으로 정렬이 된다.

튜플 컴프리헨션

squares = tuple(i**2 for i in range(1, 6))

위의 코드는 튜플의 컴프리헨션 방식을 사용하여 값을 생성하는 예제다. 1부터 5까지의 수를 기준으로 반복하면서 해당 수의 제곱값을 튜플의 값으로 생성하는 방식이며, 컴프리헨션 방식을 사용하면 위와 같이 간결하게 코드를 작성할 수 있다.


이렇게 정리한 바와 같이 튜플은 다양하게 활용이 가능하다. 리스트와 유사하지만 데이터가 불변하다는 것과 구조 자체가 달라 다루는 방식이 차이가 있다는 것을 확인할 수 있다.




튜플 언패킹 ( Tuple unpacking )

튜플 언패킹은 튜플의 요소를 여러 변수에 나눠 할당하는 것을 의미한다. 언패킹을 사용하면 코드가 훨씬 간결해지고 가독성이 좋아지는 효과가 있다.


# 튜플 선언
tuple = (1, 2, 3)

# 튜플 언패킹
a, b, c = tuple

# 변수에 할당된 값 출력
print(a)  # 1
print(b)  # 2
print(c)  # 3

위의 코드는 tuple 요소를 각각 a, b, c 변수에 언패킹하여 할당하는 예제다. 이를 통해 각 요소를 개별적으로 사용할 수 있다.


함수의 반환

def get_point():
    return 3, 4

x, y = get_point()

위와 같이 함수에서 사용할 때 반환을 튜플 구조로 하고, 호출 결과를 언패킹하여 전달받을 수 있다.

반복문

coordinates = [(1, 2), (3, 4), (5, 6)]
for x, y in coordinates:
    print(f"x: {x}, y: {y}")

반복문을 사용할 때에도 동일하게 언패킹 방식으로 튜플 내의 요소들을 각각 할당받아 작업을 처리할 수 있다.


이렇게 튜플 언패킹을 사용하면 여러 변수에 튜플의 요소를 효율적으로 할당할 수 있으며, 코드의 가독성과 편리성을 높여줄 수 있는 장점이 있다.



튜플의 성능

파이썬의 튜플은 불변한 자료구조이기 때문에 일반적으로 리스트보다 작은 크기를 갖게 된다. 이러한 특성으로 인해 튜플은 성능적인 부분에서 다양한 이점을 가지게 된다.

메모리
튜플은 한 번 생성하면 내부 요소를 변경할 수 없으므로, 불필요한 메모리 할당과 해제를 피할 수 있다. 이러한 점은 다른 가변성 자료구조 대비 메모리를 효율적으로 사용할 수 있다.

속도
튜플은 변경되지 않기 때문에 읽기 전용 데이터를 효율적으로 관리할 수 있으며, 요소에 대한 접근 및 반복 작업이 다른 자료구조에 비해 빠른 편에 속한다.

Hashable
튜플은 해시 가능한 객체로서, 딕셔너리의 키로 사용될 수 있다. 이러한 특징은 튜플을 딕셔너리의 키로 사용할 때 빠른 검색 및 조회가 가능하다.

안전성
튜플은 데이터가 불변하기 때문에 데이터의 불변성을 보장한다. 여러 스레드에서 동시에 접근할 때 데이터의 무결성을 보장하고 예기치 않은 변경을 방지하는 데 도움이 된다.


튜플은 불변하다는 특징으로 인해 메모리의 효율성과 속도 및 안전성을 보장할 수 있다. 그러나 변경이 필요한 데이터의 경우에는 튜플을 사용하는 것을 고려해봐야 할 부분이다. 튜플이 좋다고 해서 무작정 사용하는 것보다는 자료구조마다 특성을 이해하고 적절히 섞어서 사용하는 것이 시스템을 설계하고 프로그래밍하는 데에 훨씬 효율적이라고 생각한다.




마무리

오늘은 파이썬의 튜플에 대한 내용을 주제로 정리해 보았다. 튜플은 다른 언어에서도 많이 사용되는 자료구조인데, 파이썬을 배우고 개발하면서 많이 사용하게 된 것 같다. 알고 나면 쉬운데, 처음에는 어색하고 불편해서 많이 헷갈렸던 기억이 있다. 덕분에 이렇게 글로 정리를 할 수 있었고, 가장 큰 깨달음은 불변하다는 특징이 속도와 메모리 효율성이 좋다는 것이었다.
다음에는 다른 언어에서도 튜플이 유사하게 작동하는지 정리해 봐야겠다.


* 경제지표 시각화 서비스

https://econoflow.co.kr

 

Economy Flow

 

econoflow.co.kr

 

반응형