[Python] List와 Tuple을 통해 여러 데이터를 다루자

[Ted's Log] 테드로그·2021년 8월 8일
1

Python Study-note

목록 보기
4/5
post-thumbnail

👋   리스트와 튜플

  배열(Array)은 알고리즘과 데이터를 다루는데 가장 기초가 되는 자료구조이며, 많은 프로그래밍 언어에서 배열 형태의 자료구조를 구현할 수 있다. Python에서는 여러 데이터를 담을 수 있는 자료구조로 List와 Tuple을 제공한다. 이번 포스팅에서는 두 가지 자료구조의 특징을 비교해서 알아보자.


📏   Sequence 자료형

  리스트와 튜플은 파이썬의 시퀀스(sequence) 자료형에 속하는 객체들이다. 시퀀스 자료형의 특징은 객체 안의 데이터들의 순서를 기억한다는 점이다. 따라서 특정 데이터의 위치에 해당하는 index로 직접 접근이 가능하고, slicing과 같은 기능도 지원한다.
  시퀀스는 불변 시퀀스(immutable sequence)와 가변 시퀀스(mutable sequence)로 나뉘는데, 불변 시퀀스에 속하는 것이 tuple이고 리스트는 가변 시퀀스에 속한다. 불변 시퀀스 자료형은 한 번 생성되어 메모리 데이터에 할당되고 나면 변경할 수 없는 특징을 가지고 있어, 상수처럼 사용될 수 있다. 가변 시퀀스 자료형은 자유롭게 변경할 수 있어, 데이터 추가와 수정, 삭제가 가능하다.


🎼   리스트와 튜플 공통점

  두 자료구조의 공통점으로 저장하는 데이터가 모든 같은 자료형이지 않아도 된다는 점이 있다. C언어 기반의 언어에서는 배열 형태로 저장할 데이터의 형식을 같이 표기해야 한다는 부분과 차이가 있다.

my_list = ["Ted", 28, "Am I cool?", True]      # [] 형태로 객체 생성
my_tuple = ("Ted", 28, "Am I handsome?", True) # () 형태로 객체 생성

  모든 시퀀스형 객체들은 반복 가능한 성질(iterable)을 가지고 있기 때문에 반복문에 리스트와 튜플 모두 활용 가능하다.

for item in my_list:   # 객체 안의 접근가능한 데이터 수만큼 반복
    print(item)
    
for item in my_tuple:
    print(item)
    
# Result >>
# ted
# 28
# Am I cool?
# True

💡   리스트와 튜플 차이점

  리스트는 가변 시퀀스의 특징을 가지고 있어 데이터 추가, 삭제, 수정이 가능하지만, 튜플은 객체 생성 후 수정이 불가능하다. 리스트 내장함수는 파이썬 공식문서를 참고.

my_list[0] = "Ted"
my_tuple[0] = "Ted"

# TypeError: 'tuple' object does not support item assignment

  이번에 새로 알게된 차이점으로 리스트보다 튜플이 반복문을 수행할 때 속도가 빠르다고 한다. 리스트에 비해 튜플은, 불가변 시퀀스이기 때문에, 다음 인덱스의 데이터를 가르키는 포인터를 적게 사용하여 실행속도가 빠르다.
  아래의 실행코드는 참고자료에서 발췌한 부분으로 1000만건의 숫자를 리스트와 튜플에 각각 넣고, 순회한 시간을 측정한 결과이다.
import time

big_list = [num for num in range(10000000)]
big_tuple = tuple([num for num in range(10000000)])

start = time.time()

for num in big_list:
    pass

print(f"list iteration: {time.time() - start:.4f}")

start = time.time()

for num in big_tuple:
    pass

print(f"tuple iteration: {time.time() - start:.4f}")


# Result >>
# list iteration: 0.2966
# tuple iteration: 0.1535

😀   Conclusion

  리스트와 튜플은 비슷하면서도 다른 부분이 많이 존재한다는 것을 알게 되었다. 코드를 구현하면서 해결하고자 하는 문제가 어떤 자료구조를 사용했을 때 효율적으로 풀어나갈 수 있는지 고민하면서 선택해야 할 것이다.

참고자료

https://docs.python.org/ko/3/reference/datamodel.html#objects-values-and-types
https://itholic.github.io/python-list-tuple/
https://learnbatta.com/blog/why-tuple-is-faster-than-list-in-python-22/

profile
성장하는 개발자가 되기 위한 발자취 🧑🏻‍💻

0개의 댓글