본문 바로가기
programming/Python

파이썬 튜플 패킹 언패킹 Python Tuple Packing Unpacking

by 개코 - 개발과 코딩 2021. 8. 27.

파이썬 튜플은 패킹 언패킹 기능을 사용하여 튜플에 있는 값을 변수에 넣을 수 있다. 패킹은 값들을 가지고 튜플을 만드는 것이고, 언패킹은 튜플의 값들을 변수에 넣는 작업이다. 값을 모아서 하나의 수정이 불가한 컬렉션에 넣는 작업을 튜플 패킹이라 하고, 수정이 불가한 컬렉션인 튜플의 값을 변수에 분해하는 과정이 언패킹이다.

 

파이썬 튜플 패킹 언패킹
Python Tuple Packing Unpacking

어느 프로그램언어든 컬렉션의 형태를 취하는 데이터 타입은 많다.

파이썬은 이러한 점에서 자유도가 높고 사용의 범위가 넓다.

파이썬 튜플 컬렉션을 분해하고 합치는 것은 다른 언어에 비해 간편하게 해결된다.

파이썬에서 값들을 수집하여 하나의 수정할 수 없는 컬렉션에 모으는 것을 튜플 패킹이라 하고, 수정할 수 없는 튜플의 데이터들을 변수에 분해하는 과정을 언패킹이라 한다.

  • 파이썬 튜플 패킹
    여러 데이터들을 수정할 수 없는 컬렉션인 튜플에 모은다.
  • 파이썬 튜플 언패킹
    수정할 수 없는 컬렉션인 튜플의 값을 여러 변수에 분해한다.

 

튜플 패킹
Tuple Packing

파이썬에서 여러 데이터를 수정할 수 없는 컬렉션으로 모아둔 것이 튜플이기도 하다.

튜플로 데이터를 만드는 것을 패킹이라고 한다.

패킹이란 단어가 익숙하면 상관없지만, 처음 본다면 어처구니 없을 것이다.

튜플을 만드는 것은 이미 알고 있다.

괄호를 이용하고 튜플의 생성자를 이용하여 튜플을 만들 수 있다.

이 과정이 패킹이다.

print('----------')

vTuples_1 = ("브레이브엔터테인먼트", "브레이브걸스")
vTuples_2 = tuple(("민영", "유정", "은지", "유나"))
vTuples_all = vTuples_1 + vTuples_2

print("튜플 vTuples_1 : ", type(vTuples_1), len(vTuples_1), vTuples_1)
print("튜플 vTuples_2 : ", type(vTuples_2), len(vTuples_2), vTuples_2)
print("튜플 vTuples_all : ", type(vTuples_all), len(vTuples_all), vTuples_all)

print('----------')

2개의 튜플 데이트를 만들고 합쳐보기도 하였다.

이것이 패킹이다.

별거없음에 그저 한숨을 쉬었다면 그럼 그렇지 하고 넘어가도록 하자.

어쨌든 결과는 확인해 보자.

 

튜플 언패킹
Tuple Unpacking

튜플 데이터는 할당할 변수의 갯수만 맞으면 분해가 가능하다.

갯수가 맞지 않으면 아스테리크 * 표를 이용하면 나머지 튜플 데이터는 리스트로 분해가 된다.

이것이 언패킹이다.

튜플의 데이터가 3개라면 변수 3개에 간단한 방법으로 할당할 수 있다.

print('----------')

(company, groupname) = vTuples_1
(member_1, member_2, member_3, member_4) = vTuples_2

print("변수 company : ", type(company), company)
print("변수 groupname : ", type(groupname), groupname)
print("변수 member_1 : ", type(member_1), member_1)
print("변수 member_2 : ", type(member_2), member_2)
print("변수 member_3 : ", type(member_3), member_3)
print("변수 member_4 : ", type(member_4), member_4)

print('----------')

2개의 튜플데이터를 각각의 변수에 분해하는 언패킹을 하였다.

튜플데이터만큼 변수를 만들어 할당을 해 주었다.

편해서 탈이다.

 

별표 * 아스테리크 사용

위에서 튜플데이터만큼 변수를 만들어야 한다고 했다.

변수를 3개만 만들어도 귀찮은데 10개 20개의 변수데이터를 작성할 수는 없는 일이다.

귀찮다 못해 이런 경우 코드 작성하고 싶지 않다.

하지만, 특정 값들일 제외한 * 표를 사용하면 남은 값들은 리스트 변수로 할당할 수 있다.

print('----------')

(company, groupname, *member) = vTuples_all

print("변수 company : ", type(company), company)
print("변수 groupname : ", type(groupname), groupname)
print("변수 *member : ", type(member), member)

print('----------')

별표의 특징은 지정된 변수는 순서대로 저장되고, 나머지 잔여데이터들은 리스트로써 저장된다.

*표 붙은 것들은 잔여값들이라 생각하자.

별표가 중간에 있다면 어떨까.

별표가 없다는 것은 지정이 되고 매칭이 된다는 것이다.

중간변수에 * 이 있고, 마지막 변수에 별이 없다면 마지막 값은 튜플의 마지막 인덱스가 지정된다.

print('----------')

(company, *groupname, member) = vTuples_all

print("변수 company : ", type(company), company)
print("변수 *groupname : ", type(groupname), groupname)
print("변수 member : ", type(member), member)

print('----------')

* 표가 없는 변수는 처음과 마지막의 변수만 지정된다.

나머지는 리스트로써 저장된다.

결과화면을 보자.

가장 처음의 데이터와 가장 마지막의 데이터만 지정되고 나머지는 리스트로 저장된다.

변수의 갯수를 늘려보자. 가장 처음에 2개 가장 마지막에 2개 정도를 지정해 주었다.

print('----------')

(info_1, info_2, *remain, info_3, info_4) = vTuples_all

print("변수 info_1 : ", type(info_1), info_1)
print("변수 info_2 : ", type(info_2), info_2)
print("변수 *remain : ", type(remain), remain)
print("변수 info_3 : ", type(info_3), info_3)
print("변수 info_4 : ", type(info_4), info_4)

print('----------')

가장 처음의 2개 값이 지정되고, 가장 마지막의 2개 값이 지정되고 중간의 마지막은 리스트로 만들어 진 것을 알 수 있다.

*표를 제외하면 순차대로 지정된다.

반응형

댓글