정처기 감자정처기 감자
Python자료구조

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

Python 언패킹과 다중 할당

코딩Python
읽는데 7분 소요
처음 쓰인 날: 2026-04-07
마지막 수정일: 2026-09-25
조회수: —

요약

Python의 다중 할당(a, b = 1, 2), 튜플 언패킹, 두 변수 swap, for 루프와 enumerate 언패킹, 함수 반환값 받기, *rest 확장 언패킹까지. 정보처리기사 실기에 자주 등장하는 Python 언패킹 패턴을 정리합니다.

언패킹 핵심 정리

패턴설명예시
다중 할당여러 변수에 여러 값을 한 번에 대입a, b = 1, 2
튜플 언패킹튜플의 각 원소를 변수에 풀어 받기x, y = (10, 20)
swap임시 변수 없이 두 값 교환a, b = b, a
for 루프 언패킹반복문에서 (a, b) 형태 원소를 두 변수로 받기for k, v in items:
enumerate 언패킹인덱스와 값을 동시에 받기for i, x in enumerate(lst):
함수 반환값 언패킹여러 값을 반환하는 함수의 결과를 분리해 받기q, r = divmod(10, 3)
* 확장 언패킹일부는 단일 변수, 나머지는 리스트로 받기head, *rest = [1, 2, 3, 4]

언패킹이란?

언패킹(unpacking)은 "묶여 있는 값들을 풀어서 여러 변수에 한 번에 나눠 담는 것"을 말합니다. Python에서는 = 기호의 왼쪽에 변수를 여러 개 적으면, 오른쪽의 묶음(튜플·리스트 등)이 자동으로 풀려서 각 변수에 차례대로 들어갑니다.

python
코드 하이라이팅 중…

위에서 오른쪽의 10, 20은 사실 (10, 20) 튜플과 동일합니다. Python은 = 오른쪽에 콤마로 값을 나열하면 자동으로 튜플로 묶고, = 왼쪽에 변수를 여러 개 적으면 다시 풀어서 변수에 나눠 담아요.


다중 할당 (multiple assignment)

가장 기본 형태는 = 기호 양쪽에 같은 개수의 항목을 두는 것입니다.

python
코드 하이라이팅 중…

왼쪽 변수의 개수와 오른쪽 값의 개수가 다르면 오류가 납니다.

python
코드 하이라이팅 중…
다중 할당은 한 줄로 끝내는 단축 표기
a = 1; b = 2처럼 두 줄을 한 줄로 줄여 쓴 것과 같아요. 가독성을 위해 자주 사용됩니다.

튜플 언패킹

오른쪽이 명시적인 튜플이어도 동일하게 동작합니다.

python
코드 하이라이팅 중…

리스트도 같은 방식으로 풀어서 받을 수 있습니다.

python
코드 하이라이팅 중…

소괄호 ()나 대괄호 []로 묶인 값이라면 모두 언패킹의 대상이 될 수 있어요. 핵심은 "묶음의 원소 개수"와 "왼쪽 변수의 개수"가 같아야 한다는 것입니다.


두 변수 swap (동시 교환)

다른 언어에서는 두 변수의 값을 바꾸려면 임시 변수를 써야 합니다.

python
코드 하이라이팅 중…

Python에서는 언패킹을 이용해 한 줄로 swap할 수 있습니다.

python
코드 하이라이팅 중…

내부적으로는 오른쪽 b, a가 먼저 (2, 1) 튜플로 묶이고, 그 튜플이 왼쪽의 a, b로 풀려 들어갑니다. 그래서 a와 b의 값이 동시에 바뀌는 효과가 나요.

swap은 시험에 자주 출제됩니다
버블 정렬 같은 정렬 알고리즘 코드에서 a, b = b, a 형태가 자주 등장해요. 임시 변수 없이 한 줄로 교환된다는 점을 기억해 두세요.

for 루프에서 언패킹

for 루프가 매 회차 꺼내는 원소가 묶음(튜플·리스트)이라면, 그 자리에서 바로 풀어 받을 수 있습니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

위 코드는 다음과 같이 풀어 쓰는 것과 동일합니다.

python
코드 하이라이팅 중…

for num, ch in pairs:라고 쓰면 매 회차 꺼낸 튜플이 자동으로 num과 ch에 풀려 들어가서 코드가 훨씬 짧아집니다.

딕셔너리의 items() 메서드는 (키, 값) 튜플을 차례로 돌려주므로, for 루프 언패킹과 자주 함께 쓰입니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

enumerate와 함께 사용

enumerate 함수는 매 회차 (인덱스, 값) 형태의 튜플을 돌려줍니다. 그래서 for 루프에서 언패킹과 거의 항상 함께 사용됩니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

for index, fruit in enumerate(fruits):에서 index, fruit 부분이 언패킹 자리예요. enumerate가 (0, "사과") 같은 튜플을 만들면, 앞의 0은 index에, 뒤의 "사과"는 fruit에 자동으로 들어갑니다.

만약 언패킹을 쓰지 않으면 다음처럼 길어집니다.

python
코드 하이라이팅 중…

언패킹을 사용하면 첫 번째 코드처럼 한 줄로 깔끔하게 쓸 수 있어요.


함수 반환값 언패킹

Python 함수는 콤마로 여러 값을 한 번에 반환할 수 있습니다. 이때 반환값은 자동으로 튜플로 묶여 나가고, 호출하는 쪽에서 언패킹으로 받을 수 있어요.

python
코드 하이라이팅 중…

Python 표준 함수 중에도 두 값을 반환하는 함수가 있습니다. 대표적인 예가 divmod()입니다.

python
코드 하이라이팅 중…

input().split() 결과 언패킹

input()이 돌려준 한 줄짜리 문자열을 split()으로 자르면 리스트가 만들어지고, 이 리스트를 다중 할당으로 여러 변수에 한 번에 받을 수 있습니다. 키보드로 받은 값을 두 변수에 동시에 담는 정형 패턴입니다.

python
코드 하이라이팅 중…

split()이 돌려준 리스트의 원소 개수와 좌변 변수의 개수가 정확히 같아야 합니다. 입력값을 정수로 사용하려면 int()로 한 번 더 변환합니다.

python
코드 하이라이팅 중…
좌변 변수 개수 = 우변 리스트 원소 개수
a, b = input().split() 형태에서 사용자가 단어를 정확히 2개 입력하지 않으면 ValueError가 납니다. 시험 문제에서는 입력값과 변수 개수가 항상 일치하므로 안심하고 풀어도 됩니다.

별표(*) 확장 언패킹

언패킹할 때 변수 앞에 *를 붙이면, "남은 원소들을 모두 리스트로 받아라"는 뜻이 됩니다.

python
코드 하이라이팅 중…

*는 가운데에 둘 수도 있고, 마지막에 둘 수도 있어요.

python
코드 하이라이팅 중…

*가 붙은 변수는 항상 리스트로 결과를 받습니다 (원소가 0개여도 빈 리스트 []를 받아요).

*는 한 줄에 하나만 사용할 수 있어요
a, *b, *c = [1, 2, 3]처럼 *를 두 개 이상 쓰면 SyntaxError가 납니다. 어디서 끊어야 할지 모호해지기 때문이에요.

정보처리기사 실기 기출 문제

문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999