Python 데이터 구조 이해하기: Lists, Tuples, Sets, 그리고 Dictionaries 쉽게 배우기

발행: (2025년 12월 18일 오전 11:53 GMT+9)
13 min read
원문: Dev.to

Source: Dev.to

Python을 조금이라도 써 본 적이 있다면, 데이터 구조를 이미 사용하고 있었을 겁니다—아마도 그 사실을 깨닫지 못했을 수도 있죠. 숫자 리스트, 사용자 정보를 담은 딕셔너리, 혹은 중복을 제거하기 위해 사용한 집합? 이 모든 것이 파이썬 프로그래밍의 기본 골격입니다.

dev.to의 개발자들에게 파이썬 데이터 구조를 배우는 것은 단순히 면접을 통과하거나 튜토리얼을 끝내는 것이 아니라, 더 깔끔한 코드를 작성하고, 더 현명한 선택을 하며, 파이썬이 다른 많은 언어에 비해 왜 이렇게 생산적인지 이해하는 데 있습니다.

이 글에서는 네 가지 **핵심 파이썬 데이터 구조**를 살펴보겠습니다:

  • 리스트
  • 튜플
  • 딕셔너리

이야기하듯 친근하고 실용적으로, 과도하게 복잡한 이론은 배제하고 진행합니다. 끝까지 읽으면 각 구조를 언제 사용해야 하는지, 그리고 파이썬스럽게 사고하는 방법을 알게 될 것입니다.

파이썬에서 데이터 구조가 중요한 이유

구문에 들어가기 전에, 사고방식에 대해 이야기해봅시다.

데이터 구조는 다음을 도와줍니다:

  • 데이터를 논리적으로 조직하기
  • 성능 향상
  • 코드를 더 읽기 쉽고 유지보수하기 쉽게 만들기
  • 불필요한 복잡성 피하기

파이썬은 강력한 내장 데이터 구조를 제공하므로 새로 만들 필요가 없습니다. 진정한 기술은 적절한 시점에 올바른 구조를 선택하는 데 있습니다.

Python Lists: The Go‑To Data Structure

What Is a List in Python?

리스트는 순서가 있는, 변경 가능한 컬렉션입니다. 간단히 말하면:

  • 순서가 중요함
  • 데이터를 변경할 수 있음
  • 여러 데이터 타입을 함께 저장할 수 있음
tasks  = ["write code", "test feature", "deploy"]
scores = [95, 88, 76]

리스트는 매우 유연해서 초보자들이 가장 먼저 배우는 데이터 구조가 되는 경우가 많습니다.

When Should You Use Lists?

리스트는 다음과 같은 상황에 적합합니다:

  • 데이터가 자주 변함
  • 순서가 중요함
  • 아이템을 반복해서 처리해야 함

실제 예시

  • API 응답
  • 사용자 입력
  • 검색 결과
  • 시계열 데이터

Common List Operations

OperationExample
Append an elementprices.append(200)
Remove an elementprices.remove(99)
Pop (remove & return)last = prices.pop()
Sort the listprices.sort()
Get lengthlen(prices)
prices = [120, 99, 150]
prices.append(200)   # → [120, 99, 150, 200]
prices.sort()        # → [99, 120, 150, 200]

Real‑World Insight

데이터가 점점 늘어나거나 줄어드는 컬렉션처럼 느껴진다면, 리스트가 보통 올바른 선택입니다. 유연하고 가독성이 좋으며 초보자에게 친숙합니다.

튜플: 고정, 예측 가능, 그리고 안전함

튜플이란?

튜플은 리스트와 비슷하지만 불변(immutable) 입니다—한 번 생성되면 변경할 수 없습니다.

dimensions   = (1920, 1080)
status_codes = (200, 404, 500)

리스트 대신 튜플을 사용하는 이유

불변성은 제한처럼 보일 수 있지만 실제로는 버그가 아니라 기능입니다.

튜플의 장점

  • 데이터가 실수로 변경되는 것을 방지
  • 리스트보다 약간 빠름
  • 의도를 명확히 전달 (“이 컬렉션은 일정하게 유지되어야 함”)

튜플의 일반적인 사용 사례

다음과 같은 경우에 튜플이 이상적입니다:

  • 데이터가 변경되지 않아야 할 때
  • 값이 논리적으로 그룹화될 때
  • 함수에서 여러 값을 반환할 때
def get_user_info():
    return ("Alex", 29, "Developer")

실제 사례 인사이트

튜플을 읽기 전용 컨테이너로 생각하세요. 앞으로의 코드(또는 팀원)가 데이터를 수정하지 않도록 하고 싶다면, 튜플은 그 의도를 명확히 합니다.

Python Sets: Unique and Efficient

집합이란?

집합은 고유한 요소들의 순서가 없는 컬렉션입니다. 중복 값은 자동으로 제거됩니다.

languages = {"Python", "JavaScript", "Python"}   # → {"Python", "JavaScript"}

집합이 유용한 이유

집합은 다음에 최적화되어 있습니다:

  • 빠른 멤버십 검사 (x in my_set)
  • 중복 제거
  • 수학 연산 (합집합, 교집합, 차집합)

일반적인 집합 연산

연산구문예시
합집합set1 | set2all_langs = backend | frontend
교집합set1 & set2common = backend & frontend
차집합set1 - set2unique_backend = backend - frontend
요소 추가my_set.add(item)my_set.add("Go")
요소 제거my_set.discard(item)my_set.discard("Java")
backend  = {"Python", "Java"}
frontend = {"JavaScript", "Python"}

common = backend & frontend   # → {"Python"}

언제 집합을 사용해야 할까?

집합은 다음과 같은 경우에 완벽합니다:

  • 고유성이 중요할 때
  • 순서가 필요 없을 때
  • 빠른 조회가 필요할 때

실제 예시

  • 고유 사용자 ID
  • 태그 또는 카테고리
  • 대규모 데이터셋에서 중복 제거

실전 인사이트

리스트에서 중복을 수동으로 제거하는 코드를 작성한다면, 멈추고 생각해 보세요: 이것을 집합으로 처리하면 안 될까? 대부분의 경우 답은 입니다.

Source:

사전: 데이터를 스마트하게 매핑하기

파이썬에서 사전이란?

사전은 키‑값 쌍으로 데이터를 저장하므로 의미 있는 키를 사용해 값을 쉽게 조회할 수 있습니다.

user = {
    "username": "dev_guy",
    "followers": 1200,
    "active": True
}

파이썬에서 사전이 어디에나 쓰이는 이유

사전은 다음과 같은 장점을 제공합니다:

  • 키를 통한 빠른 접근
  • 명확하고 자체 문서화된 데이터 구조
  • 현실 세계 데이터(예: JSON)의 자연스러운 매핑

일반적인 사전 연산

작업예시
값 조회user["followers"]
항목 추가 / 업데이트user["followers"] += 1
항목 삭제del user["active"]
항목 순회for k, v in user.items():
모든 키 가져오기user.keys()
모든 값 가져오기user.values()
user["followers"] += 1   # 팔로워 수 증가

언제 사전을 사용해야 할까?

다음과 같은 경우 사전이 이상적입니다:

  • 데이터에 **라벨(키)**이 존재할 때
  • 구조화된 정보가 필요할 때
  • 가독성이 중요할 때

예시

  • 설정(configuration)값
  • API에서 받아오는 JSON 데이터
  • 사용자 프로필
  • API 응답

실전 인사이트

데이터가 *“X의 값은 무엇인가?”*와 같은 질문에 답한다면, 거의 확실히 사전을 사용해야 하는 경우입니다.

Python 데이터 구조 비교

구조순서가변성고유성일반적인 사용
List✅ 순서 있음✅ 가변❌ 중복 허용순차 데이터, 반복
Tuple✅ 순서 있음❌ 불변❌ 중복 허용고정 컬렉션, 반환값
Set❌ 순서 없음✅ 가변✅ 고유성 보장멤버십 테스트, 중복 제거
Dictionary❌ 순서 없음 (키)✅ 가변✅ 고유 키매핑 / 연관 배열

각각은 특정 문제를 해결합니다. 잘못된 구조를 사용하면 코드가 이해하기 어렵고 불필요하게 느려질 수 있습니다.

올바른 데이터 구조 선택

결정하기 전에 다음 질문을 스스로에게 물어보세요:

  1. 순서가 중요한가요? → List 또는 Tuple
  2. 데이터가 변경될 가능성이 있나요? → Mutable (List, Set, Dict) vs. Immutable (Tuple)
  3. 값이 고유해야 하나요? → Set (또는 Dict 키)
  4. 라벨(키)이 필요하나요? → Dictionary

당신의 답변은 보통 올바른 데이터 구조를 직접 가리킵니다.

성능 및 파이썬식 모범 사례

실용적인 가이드라인

  • 리스트를 사용하여 반복 및 순서가 있는 데이터를 다룹니다.
  • 튜플을 사용하여 상수 및 고정 컬렉션을 다룹니다.
  • 을 사용하여 빠른 조회와 고유성을 보장합니다.
  • 딕셔너리를 사용하여 구조화된 키‑값 데이터를 다룹니다.

파이썬식 코드를 작성하는 것은 영리한 트릭보다 명확성과 의도에 더 중점을 둡니다.

피해야 할 흔한 초보자 실수

  • uniqueness가 중요한 경우 lists 사용 (셋을 선호).
  • modify tuples을 시도 (변경 가능성이 필요하면 리스트 선택).
  • cost of large list operations 무시 (예: list.remove()는 O(n)).
  • 간단한 순서가 있는 데이터에 dictionaries 과다 사용 (리스트나 튜플이 더 명확).

코딩을 즐기세요! 🎉

간단한 시퀀스를 위한 사전 사용

단기 편의를 위해 가독성 무시

이러한 실수를 초기에 피하면 나중에 디버깅에 소요되는 시간을 절약할 수 있습니다.

최종 생각: 기본을 마스터하고 더 빠르게 레벨업

Python의 힘은 복잡함에서 오는 것이 아니라, 잘 설계된 기본 개념에서 옵니다.
리스트, 튜플, 집합, 그리고 딕셔너리는 스크립트, API, 데이터 파이프라인 등 거의 모든 Python 프로젝트에서 사용하게 될 도구입니다.

각 데이터 구조가 존재하는 이유를 이해하면, 코드는 다음과 같이 변합니다:

  • 더 깔끔하게
  • 더 빠르게
  • 더 유지보수가 쉬워지고
  • 더 전문적으로

Python 개발자로 성장하고 싶다면, 이 핵심 데이터 구조들을 마스터하는 것이 가장 좋은 투자 중 하나입니다.

코드를 적게 작성하세요. 더 나은 구조를 선택하세요. Python이 여러분을 대신해 일하게 하세요.

Back to Blog

관련 글

더 보기 »