List & Tuple

Jina·2020년 4월 6일
0

Session

목록 보기
3/12

List

1. List란?

  • 가장 기초적이고 단순하면서도 가장 자주 사용 되는 자료 구조
  • JavaScript 에서는 Array

※ List와 Array 참고

  • Python 에서는 List 가 Array 라고 생각하고 써도 무방 ( 엄밀히 말하자면 Array 와 List 는 다름 )
  • 기능적으로는 거의 동일하지만 메모리 효율면에서는 Array 가 유리함
  • Python 에서 Array 를 사용하려면 import Array 모듈을 import 해서 사용

2. 특징

순차적으로 데이터를 저장하는 자료 구조

  • 순차적(ordered)으로 데이터를 저장
  • 서로 연결된 데이터들을 순차적 으로 저장할때 사용
  • 순서가 상관 없더라도 일반적으로 서로 연결된 데이터들을 저장할때 사용

기타 특징

  • 삽입(insertion) 순서대로 저장됨 (새로 삽입되는 요소는 마지막 요소가 됨)
  • mutable
  • 동일한 값도 여러번 삽입 가능
  • Multi-dimentional Array (다중차원 배열)
    • Array의 요소가 array가 될 수 있음

3. 내부 구조

  • 순차적으로 번호 지정 가능 ( index )
  • Index는 0부터 시작됨
  • 맨 마지막 요소 부터 카운팅 가능 ( 이때는 마지막이 -1 )

4. 장점

데이터에 순서가 있기 때문에 가지는 장점

4-1. Indexing

Index를 사용해 특정 요소를 array( list )로 부터 읽어 들이는 것 가능

4-2. Slicing

요소의 특정 부분( n번째 index부터 m번째 index )까지 따로 분리해 조작하는 것 가능

5. 단점

5-1. Removing or Adding Elements

항상 메모리가 순차적으로 이어져있어야 하기 때문에 만약 중간의 특정 요소를 삭제하면 아래와 같이 인덱스 변경됨 (추가하는 경우에도 인덱스에 변경이 생김)

  • 중간에 삭제한 경우 : 삭제된 요소로 부터 뒤에 있는 모든 요소들을 앞으로 한칸씩 이동시켜주어야함

  • 중간에 추가한 경우 : 그 뒤의 요소들이 하나씩 밀리게 됨

  • 배열에서 요소를 삭제/추가 하는 것이 다른 자료 구조에 비해 느릴 수 있음

요약

정보가 자주 삭제 되거나 추가되는 데이터를 담기에는 적절하지 않음

5-2. Resizing

Resizing 이란 사이즈를 다시 조정한다는 뜻

  • pre-allocation : 배열이 처음 생성될 때 어느 정도 메모리를 미리 할당하는 것

  • 메모리를 pre-allocation 함으로써 새로 추가되는 요소들도 순차적으로 메모리에 저장될 수 있음

  • 요소들이 처음 할당한 메모리 이상으로 많아진다면 resizing이 필요 ( 메모리를 더 할당해야함 )

  • 추가적으로 할당된 메모리 또한 순차적이어야 함

  • 배열의 resizing은 상대적으로 오래걸리는 operation

예시 ) 10개의 메모리 공간이 다 차서 10개를 추가해야 되는 경우

20개 크기의 메모리를 생성 --> 기존 10개를 복사하고 --> 11번 부터 데이터가 순차적으로 추가됨
아래의 사진 참고

요약

  • 사이즈 예측이 잘 안 되는 데이터를 다루기에는 적절하지 않음
  • 사이즈가 급격하게 자주 늘어날 확률이 있는 데이터는 다른 적합한 자료 구조를 선택해야함

6. 적절한 사용 예

  • 순차열적인 데이터를 저장할 때 ( 값보다는 순서가 중요한 데이터 )
  • 다차원 데이터를 다룰 때 ( Multi-dimensional Array )
  • 어떠한 특정 요소를 빠르게 읽어야 할 때 ( index를 통해 바로 읽을 수 있기 때문 )
  • 데이터의 사이즈가 급변하지 않을 때
  • 요소가 자주 삭제 되거나 추가되지 않을 때

Tuple

1. Tuple 이란?

  • 순차적으로 저장할 수 있는 순열 자료구조
  • immutable
  • 2 ~ 3개 정도의 소규모 데이터를 저장할 때 많이 사용
  • 함수에서 리턴 값을 한 개 이상 리턴하고 싶을 때 사용

2. 장점

간단한 값을 빨리 표현하고 싶을 때 용이함

3. 단점

데이터가 무슨 의미인지 명확하지 않음

요약

  • Tuple은 소규모 데이터를 다루기에 적합
  • 단점을 극복하기 위해 Named Tuple 이란 것도 존재

4. 적절한 사용 예

  • Array(List)를 쓰기에는 간단한 데이터들을 표현할 때 사용
  • Tuple이 Array(List) 보다 더 가볍고 메모리도 적게 사용함

0개의 댓글