Python

Python 튜플

Devwon99 2024. 1. 20. 16:00

 

튜플(tuple)은 클래스와 같이 새로운 형태를 정의할때 사용한다.

크게 복잡하지 않다면 class를 사용하지 않고 tuple을 사용하는 경우가 있다.

튜플 선언


def onetwo(): 

    return 1, 2

print(onetwo())

출력 결과 (1, 2)

위의 코드에서  (1, 2) 에 해당하는 것이 tuple이다. 튜플은 리스트와 비슷하지만 크게 2가지 차이점이 있다.

첫번째는 튜플은 값을 수정할 수 없다는 것이다. 두번째는 튜플은 값을 추가하거나 기존 값을 제거할 수 없다는 것이다.

튜플은 immutable하다. 


 

패킹과 언패킹


튜플이 immutable하기 때문에 활용도가 적을 것 같지만, 사실  튜플의 주 역할은 패킹과 언패킹이다.

def onetwo(): 

    return 1, 2

a, b = onetwo()

print(a, b, a + b)

출력 결과: 1, 2, 3

위 출력 결과로 알 수 있듯이 a변수에는 1이 b변수에는 2가 할당된다. 이것을 튜플 언패킹이라고 한다. 이것을 활용하여 하나의 함수로 여러가지 반환 값을 기록하고 변수에 할당할 수 있다.

반대로 패킹은 여러개의 값을 하나의 변수에 저장할 수 있다.

num = [1, 2, 3, 4, 5] 리스트를 활용하여 num 리스트에 1,2,3,4,5 를 저장한 코드

num = 1, 2, 3, 4, 5 튜플을 활용하여 num 튜플 변수 한개에 1,2,3,4,5를 패킹한 코드


 

 클래스와 비교


클래스 코드

class identity:

    def __init__(self, name, sn, address):

    self.name = name

    self.sn = sn

    self.address = address

id1 = identity("홍길동", "000101-3000000","서울")

 

동일한 기능을 하는 튜플 코드

id1 = ("홍길동", "000101-3000000","서울")

위 클래스 코드를 tuple로 간단하게 저장할 수 있다.

하지만 튜플의 단점으로는 각 값이 의미하는 것을 알기 어려워 가독성이 떨어지기 때문에 언패킹시 적절한 이름의 변수를 붙여 사용해야한다.

id1 = ("홍길동", "000101-3000000","서울")

name, sn, address = id

print(name, sn, address) 출력 결과: 홍길동 000101-3000000 서울


 

 튜플의 기본 값과 값 변경


튜플은 클래스와 다르게 기본 값 개념이 없다. 값이 있지 않다면 적절한 값으로 초기화 하며 생성해야한다.

id1 = ("미입력", " 미입력"," 미입력 ") 출력 결과 : 미입력 미입력 미입력

 

튜플은 기본적으로 값을 변경할 수 없기 때문에 값 변경시 다시 새로운 튜플을 동일한 이름으로 선언하여 변경해야한다.

id1 = ("미입력", " 미입력"," 미입력 ")

name, sn, address = id1 

print(name, sn, address) 출력 결과 : 미입력 미입력 미입력

id1 = (name, sn, "서울")

name, sn, address  = id1

print(name, sn, address) 출력 결과 : 미입력 미입력 서울

 

id1 = "홍길동", "000101-3000000","서울"

_, _, address = id1

print(address)

address 값만을 필요로 할때 위처럼 코드를 작성한다. 언패킹시 필요 없는 값들의 부분에 변수명을 _를 주면 된다.