[Python] Tuple을 공부해보자 (Tuple/Packing과 Unpacking/* Asterisk)

2022. 8. 11. 18:23개발공부 기강잡자/Python

파이썬에는 Tuple (튜플)이라는 자료형이 있다. 

리스트와 유사하며, 여러개의 값을 묶어 저장할 때 사용한다. 리스트와 동일하게 인덱싱, 슬라이싱이 가능하다!

 

리스트와 비교했을 때,

- 리스트는 데이터를 []로 감싸며, 튜플은 ( )으로 데이터를 감싼다.

- 리스트는 값을 생성, 삭제, 수정이 가능하지만 튜플은 불가능하다.

= 튜플은 Immutable(변하지 않는) 객체이다.

= 튜플의 요소를 변경하거나 삭제하려고 하면 오류가 발생한다. 

2022.07.16 - [개발공부 기강잡자/Python] - [Python] Call by Reference / Call by Value | 파이썬에선 뭘 쓸까? | Mutable & Immutable

 

[Python] Call by Reference / Call by Value | 파이썬에선 뭘 쓸까? | Mutable & Immutable

Call by Value와 Call by Reference의 차이 1. Call by Value란? (값에 의한 호출) : 함수가 인자로 받은 값을 복사하여 처리한다! 인수와 매개변수가 다른 메모리 공간을 사용한다. 인수의 값만 전달하여 매개

devum.tistory.com

(위 게시글에 Immuatable object에 대한 내용이 설명되어 있으니 참고하는 것도 좋을 것 같습니다.)

튜플의 패킹 Packing 과 언패킹 Unpacking

  • 하나 이상의 값을 튜플로 묶는 행위 : 패킹
  • 튜플에 묶여 있는 값들을 풀어내는 행위 : 언패킹
# 패킹
tri_one = 12, 15
print(tri_one)

# 언패킹 - 튜플에 저장된 값의 수와 이를 저장할 변수의 수가 일치
tri_three = (12, 15)
bt, ht = tri_three
print(bt, ht)

실행결과

- 한 변수에 ,(콤마)로 값을 구분하여 할당하면 튜플 형태의 데이터가 생성된다. 

- (12, 15)와 같이 튜플 형태로 대입해도 튜플이 생성된다. (괄호를 생략해도 무방하다)

- 언패킹 시에는 튜플의 값을 저장하려는 변수에 튜플을 할당하면 된다. 이때, 튜플에 저장된 값의 갯수와 이를 저장할 변수의 수가 일치해야한다.

 

 

파이썬의 튜플 자료형을 사용하면 이런 멋진 것도 할 수 있다.

# 1
nums_a = (1, 2, 3, 4, 5)
n1, n2, *others = nums_a  # 둘이상의 값을 리스트로 묶을 때 * 를 사용

print("n1:{}, n2:{}, others:{}".format(n1, n2, others))

# 2
nums_b = (1, 2, 3, 4, 5)
first, *others, last = nums_b

파이썬의 경우 * 기호가 포인터가 아니라 튜플에서 둘 이상의 값을 리스트로 묶어 저장할 때 사용한다! 가변적인 갯수의 값을 리스트에 할당할 때 사용한다.

 

#1 의 경우, (1, 2, 3, 4, 5) 값을 갖는 튜플을 n1, n2, others 라는 변수에 언패킹한다.

이때 * 기호를 볼 수 있는데, 튜플 값 순서대로 n1, n2에 값을 대입하고 남은 나머지의 값을 others에 리스트로 저장한다.

 

# 2의 경우는 *others 변수가 중앙에 있는 것을 볼 수 있는데, 처음과 마지막 값을 각각 first, last 변수에 저장하고, 맨 앞뒤 값을 제외한 중간의 값들을 리스트로 others 변수에 저장한다.

 

실행결과

 

튜플을 함수 매개변수로 사용하기

def merge_string(*text_list) :
    result = ''
    print(text_list)      # 문자열로 이루어진 튜플

    for s in text_list :
        result = result + s

    return result

merge_string('a', 'b', 'c', 'd')

위는 받은 문자들(튜플형태)을 for문으로 언패킹하여 하나의 문자열로 만드는 함수를 호출하는 소스이다.

함수에서 받는 매개변수가 *text_list 로 선언되어 있다. 이런 경우에는 함수는 값의 갯수 제한 없이 여러 개의 값을 받을 수 있다.

이를 가변인자 (Variable Parameter) 라고 하며, 임의의 갯수의 인자를 받을 수 있다.

 

실행결과는 다음과 같으며, 함수는 값을 튜플 형태로 받았음을 확인할 수 있다.