파이썬/기초 프로그래밍

파이썬에서 *args와 시퀀스 언패킹의 차이 이해하기

Data Jun 2025. 9. 6. 17:49

파이썬에서 * 기호는 여러 맥락에서 쓰입니다. 대표적으로 가변 인자시퀀스 언패킹이 있는데, 비슷해 보이지만 동작 방식은 다릅니다

 

1. 가변 인자 *args

함수 정의에서 *args는 개수가 정해지지 않은 인자들을 받을 때 사용합니다.
이 값들은 항상 **튜플(tuple)**로 패킹됩니다.

def demo(*args):
    print(args, type(args))

demo(1, 2, 3)
# 출력: (1, 2, 3) <class 'tuple'>

*args는 “들어온 인자를 모두 하나의 튜플로 묶어라”라는 의미입니다. 인자가 하나도 없으면 () 빈 튜플이 들어옵니다.

 

2. 시퀀스 언패킹

일반 할당문에서도 *을 쓸 수 있습니다.
이 경우에는 시퀀스를 풀어서 여러 변수에 나누어 담는 언패킹 동작을 합니다.

nums = (1, 2, 3, 4)

x, *rest = nums
print(x)       # 1
print(rest)    # [2, 3, 4]  (리스트)

여기서 주목할 점은 rest가 리스트라는 것입니다. 시퀀스가 튜플이어도, 문자열이어도, *변수로 받으면 항상 리스트로 들어옵니다.

 

 

정리하면

  • *args는 함수 정의에서 가변 인자를 패킹하는 문법 → 결과는 항상 튜플
  • 시퀀스 언패킹은 일반 할당에서 나머지를 리스트로 언패킹하는 문법 → 결과는 리스트
  • 두 문법은 모두 *을 쓰지만, 맥락과 결과가 다르다는 점이 중요합니다.