목록으로

프로그래밍 · Python

Python 입문 시리즈 #11: 튜플로 변하지 않는 데이터 저장하기

BeanCon
Python 입문자가 Tuple과 불변 데이터 구조를 학습하는 과정을 표현한 대표 이미지

Python 입문 시리즈 11편입니다. Tuple이 필요한 이유, List와의 차이, 수정 불가능한 데이터 저장, 실무 활용 사례, 성능과 메모리 차이, Tuple 언패킹, 함수 반환값, AI 개발과 표준 라이브러리에서 자주 만나는 Tuple, 초보자가 많이 하는 실수까지 정리했습니다.

1. 튜플이 필요한 이유

List가 있는데 왜 Tuple이 필요할까요? 이 질문은 Python을 배우는 초반에 반드시 만나게 됩니다.

짧은 대화로 이해하기

개발자가 List만 있으면 충분하지 않냐고 묻자 Python은 주민등록번호처럼 바뀌면 안 되는 데이터를 리스트에 저장해도 괜찮겠냐고 되묻습니다. 핵심은 실수로 변경되면 안 되는 데이터를 어떻게 보호할 것인가입니다.

프로그램에는 변해도 되는 데이터와 변하면 안 되는 데이터가 함께 존재합니다. Tuple은 후자에 해당하는 데이터를 안전하게 보관하기 위해 사용합니다.

변하면 안 되는 데이터 예시
  • 주민등록번호
  • GPS 좌표
  • 생년월일
  • 국가 코드
  • RGB 색상값
  • 데이터베이스 기본키
  • API 응답 포맷

리스트의 위험성

List는 값을 자유롭게 바꿀 수 있습니다. 이 장점은 동시에 위험이 되기도 합니다.

user = ["Lee", "Korea", "Developer"]

user[1] = "USA"

print(user)

결과입니다.

['Lee', 'USA', 'Developer']

문법적으로는 아무 문제가 없지만, 국가 정보가 실수로 바뀌었습니다. 데이터가 바뀌면 안 되는 상황이라면 이런 변경은 버그가 됩니다.

2. Tuple 기본 개념

Tuple은 List와 비슷하게 여러 값을 순서대로 저장하지만, 한 번 만들어지면 값을 수정할 수 없습니다.

List와 Tuple 문법

List는 대괄호를 사용합니다.

colors = ["red", "green", "blue"]

Tuple은 소괄호를 사용합니다.

colors = ("red", "green", "blue")
Tuple의 핵심

Tuple은 읽기 전용 데이터 저장소에 가깝습니다. 수정, 추가, 삭제를 허용하지 않기 때문에 데이터의 의도를 코드에 드러낼 수 있습니다.

Python이 Tuple을 제공하는 이유는 단순합니다. 절대 변하면 안 되는 데이터를 더 명확하고 안전하게 다루기 위해서입니다.

3. 직접 확인해보기

서버 접속 정보를 Tuple로 저장해보겠습니다.

server = (
    "192.168.0.10",
    3306,
    "mysql"
)

출력하면 다음과 같은 형태로 보입니다.

print(server)

결과입니다.

('192.168.0.10', 3306, 'mysql')

이번에는 포트 번호를 바꾸려고 시도해보겠습니다.

server[1] = 8080

결과입니다.

TypeError

Python은 Tuple 내부 값을 바꾸는 작업을 거부합니다. 이 제한이 바로 Tuple의 존재 이유입니다.

4. Tuple 실무 활용

실무에서 Tuple은 고정된 구조를 가진 값이나 바뀌면 안 되는 설정 값을 표현할 때 자주 사용됩니다.

DB 연결 정보

호스트, 포트, 계정처럼 프로그램 실행 중 임의로 바뀌면 안 되는 설정 값을 묶을 수 있습니다.

좌표 데이터

위도와 경도처럼 한 쌍으로 움직이는 고정 값을 표현하기 좋습니다.

RGB 색상값

빨강, 초록, 파랑 값처럼 순서와 개수가 정해진 데이터를 담기 좋습니다.

DB 연결 정보

db_config = (
    "localhost",
    3306,
    "root"
)

이 정보는 프로그램 실행 중 마음대로 바뀌면 안 됩니다.

GPS 좌표

location = (37.5665, 126.9780)

서울시청의 GPS 좌표처럼 지도 서비스, 배달 시스템, 드론 시스템, 내비게이션에서 좌표는 순서와 의미가 고정된 데이터입니다.

RGB 색상값

red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)

색상 정보도 보통 임의로 변경하는 값이 아니라 정해진 조합으로 사용합니다.

5. Tuple과 List 비교

Tuple은 수정 기능을 지원하지 않기 때문에 List보다 더 단순하게 동작할 수 있습니다. 일반적으로 Tuple은 List보다 빠르고 메모리 사용량도 더 적은 편입니다.

(1, 2, 3)

비슷한 데이터를 List로 만들면 다음과 같습니다.

[1, 2, 3]
항목ListTuple
수정 가능OX
추가 가능OX
삭제 가능OX
속도보통더 빠름
메모리상대적으로 큼상대적으로 작음
사용 목적변경되는 데이터고정 데이터

개발자들이 Tuple을 좋아하는 이유

실제 프로젝트에서 누군가 실수로 데이터를 바꿔 생기는 버그는 꽤 무섭습니다. Tuple은 이런 실수를 줄이는 데이터 보호 장치가 됩니다.

country_codes = (
    "KR",
    "US",
    "JP",
    "CN"
)

다음 코드는 허용되지 않습니다.

country_codes[0] = "ABC"

6. Tuple 언패킹

Tuple은 여러 값을 한 번에 꺼내는 언패킹과 함께 사용할 때 매우 편리합니다.

person = ("Lee", 30)

일반적인 인덱스 접근 방식입니다.

name = person[0]
age = person[1]

언패킹을 사용하면 더 간결하게 작성할 수 있습니다.

name, age = person

출력해보겠습니다.

print(name)
print(age)

결과입니다.

Lee
30

7. 함수와 Tuple

Python 함수는 여러 값을 반환할 때 Tuple을 자연스럽게 사용합니다.

def get_user():
    return "Lee", 30

반환값은 언패킹으로 바로 받을 수 있습니다.

name, age = get_user()

결과입니다.

Lee
30
함수 반환값의 정체

return "Lee", 30처럼 값을 여러 개 반환하는 코드는 내부적으로 Tuple을 반환하는 방식으로 동작합니다.

8. AI 개발과 표준 라이브러리의 Tuple

AI 개발, 데이터 분석, 딥러닝을 배우면 Tuple을 거의 매일 만나게 됩니다. 특히 크기, 모양, 차원을 표현할 때 자주 사용합니다.

AI 개발에서 자주 보이는 Tuple
  • 이미지 크기
  • AI 모델 입력 Shape
  • Tensor Shape
  • NumPy 배열 차원
  • PyTorch와 TensorFlow의 데이터 형태
image_size = (1920, 1080)
input_shape = (224, 224, 3)
(32, 512)

표준 라이브러리와 외부 모듈에서 만나는 Tuple

Tuple은 Python 표준 라이브러리와 데이터베이스 작업에서도 자주 숨어 있습니다.

cursor.fetchone()

결과 예시입니다.

(1, "Lee", "Developer")
socket.getpeername()

결과 예시입니다.

('192.168.0.1', 443)
os.path.split()

결과 예시입니다.

('/home/user', 'file.txt')

Tuple은 단순한 문법이 아니라 Python 생태계 전반에서 널리 쓰이는 기본 데이터 표현 방식입니다.

9. 자주 하는 실수와 면접 질문

실수 1: Tuple을 수정하려고 시도하기

data = (1, 2, 3)

data[0] = 100

Tuple은 값을 바꿀 수 없기 때문에 오류가 발생합니다.

실수 2: 원소가 하나인 Tuple 만들기

다음 코드는 Tuple이 아니라 정수입니다.

data = (10)

원소가 하나인 Tuple은 반드시 쉼표가 필요합니다.

data = (10,)
면접 질문답변 방향
Tuple이 있는데 왜 List를 사용할까요?데이터가 변경될 가능성이 있으면 List를 사용하고, 변경되면 안 되는 데이터는 Tuple을 사용합니다.
Tuple의 장점은 무엇인가요?수정 불가능한 구조로 데이터 의도를 명확히 표현하고, 일반적으로 List보다 가볍고 빠릅니다.

10. 정리와 다음 편 예고

오늘 배운 내용을 한 문장으로 정리하면 List는 자유롭게 수정 가능한 메모장이고, Tuple은 한 번 작성하면 봉인되는 계약서입니다.

핵심 정리
  • Tuple은 여러 값을 순서대로 저장하는 자료구조입니다.
  • Tuple은 한 번 생성되면 값을 수정할 수 없습니다.
  • List는 변경되는 데이터에, Tuple은 고정 데이터에 적합합니다.
  • Tuple은 좌표, 색상, 설정값, 함수 반환값, Shape 표현에 자주 사용됩니다.
  • Tuple 언패킹을 사용하면 여러 값을 간결하게 꺼낼 수 있습니다.
  • 원소가 하나인 Tuple은 반드시 쉼표를 포함해야 합니다.

Python 개발자로 성장할수록 단순히 값을 저장하는 것에서 끝나지 않고, 어떤 데이터가 바뀌어도 되는지와 어떤 데이터가 바뀌면 안 되는지를 구분하게 됩니다. 이 차이가 단순 코딩과 소프트웨어 설계의 차이를 만듭니다.

초급 개발자

user = ["Lee", 30]처럼 단순히 값을 묶어 저장합니다.

중급 개발자

user = {"name": "Lee", "age": 30}처럼 의미 있는 이름으로 데이터를 구조화합니다.

고급 개발자

USER_ROLES = ("ADMIN", "MANAGER", "USER")처럼 바뀌면 안 되는 데이터를 명확하게 보호합니다.

user = ["Lee", 30]
user = {
    "name": "Lee",
    "age": 30
}
USER_ROLES = (
    "ADMIN",
    "MANAGER",
    "USER"
)
Python 입문 연재 12 예고
  • 집합 Set 이해하기
  • 중복 데이터를 자동으로 제거하는 방법
  • Set이 데이터를 효율적으로 관리하는 방식

댓글

0

댓글을 불러오는 중입니다.