[자료구조] Tuple 너가 뭘 할 수 있는데

송명규·2023년 4월 3일
0

CS_자료구조

목록 보기
1/1

파이썬을 하다보면 다른 언어에 비해 기가 막히고 코가 막히는 리스트 때문에 너무너무 편해서 리스트만 쓸때가 많다.
하지만 그것도 혼자서 공부하는 수준에서 그렇지, 실제로는 tuple도 많이 쓸.. 수도 있다!
그러니 이왕 뭔지 알아볼거 제대로 알고 가자.

Tuple이란?

파이썬에서 제공되는 배열"처럼" 사용할 수 있는 자료구조이다.

중요한건 배열"처럼"이라는 것이다. 배열이 절대 아님.

그럼 무엇이 다르냐?

일단 수정과 삭제가 안된다..

아니 그럼 왜 써요..

진정하고 일단 들어보자..

tuple은 data를 수정할 수 가 없기 때문에,
append, remove, insert 전부 될 리가 없다.

t = (1,)
# 하나만 있을때는 항상 뒤에 , 를 붙혀 줘야한다.
# t = (1) 이러면 괄호가 풀리면서 그냥 1이 되버린다..
t.append(2)

tuple은 그냥 append, remove 등등 없다.

있었는데? 아니 없어요 그냥.

암튼 그래서 왜 쓰느냐?

메모리 공간을 적게 차지함!

import sys

# as tuple
a = (1, 2, 3)
print(sys.getsizeof(a))

b = [1, 2, 3]
print(sys.getsizeof(b))

# 출력
32
60

뜬금없이 이게 왜 이러냐면,
사실 파이썬의 list는 다른 언어의 array + linked list 의 기능을 하고있다.

파이썬만 생각하고 파이썬만 바라보는 파이썬 밖에 모르는 바보들은 모르겠지만, 사실 다른 언어들은 array를 생성할 때, size를 정해둔다.
값이 8개 들어갈 것 같으면, array를 생성할때 미리 "사장님 여기 8개 array 하나 주소"라고 말하는 것이다.(아니면 주문 안 받고 에러남)

그러나 파이썬은 오마카세 같은거다.
손님이 8개 정도 먹을 것 같으면 대충 8개 만들어 놓고, 배고프다하면 size를 더 준다. 그런데 음식을 미리미리 만들어놔야하니, 손님이 배부르다하면 size가 남을 수 밖에 없지만, 어쩔 수 없이 음식을 미리 만들어 놓는것이다.

그림을 보면 이해가 빠르다.

왼쪽이 튜플(정적배열, 값이 정해져 있음), 오른쪽이 list(동적배열, 값이 정해져 있지 않음)이다.

list는 저렇게 거의 항상 남는 공간이 있을 수 밖에 없다.
0, 4, 8, 16, 25, 35, 46, 58 ... 이렇게 칸을 늘려가는데, 알 필요 없다. 공간이 남는다는 것만 기억하자.

그래서, 위에서 말했듯이,
'어짜피 안바뀔 값이면, 그냥 정적배열 쓰고 메모리랑 속도나 좋아지게하지;;'
뭐 이런 느낌이다.

그래서 언제 써요?

주로 2~3개의 값이 들어간, 안의 구조가 바뀔일이 없는(바뀔려면 아예 전체 구조가 바뀌어야하는) 그런 값에 쓰인다.

주로 좌표값에 많이 쓰인다.

그냥 귀찮아서 list 쓴다고?

import timeit

print("튜플 경과시간 : ", timeit.timeit('t = (1,2,3,4,5,6,7,8,9)',number=999999))
print("리스트 경과시간 : ",timeit.timeit('l = [1,2,3,4,5,6,7,8,9]',number=999999))


# 출력

튜플 경과시간 :  0.014356082999999999
리스트 경과시간 :  0.06533462500000001

무려 2.x배만큼이나 차이난다...

튜플을 써야할 곳에는 적절하게 써보는 것도 나쁘지 않음!

참조

https://da2so.tistory.com/51
https://fierycoding.tistory.com/59

profile
안녕하세요

0개의 댓글