본문 바로가기
wecode/TIL 정리

자료구조 TIL - 1. Array, Tuple

by 왕거 2020. 8. 3.

파이썬에서의 Array

 

Python List vs. Array - when to use?

If you are creating a 1d array, you can implement it as a List, or else use the 'array' module in the standard library. I have always used Lists for 1d arrays. What is the reason or circumstance ...

stackoverflow.com

Array의 특징

  • 데이터를 순차적(Ordered)으로 저장한다.
  • 서로 연결된 데이터를 순차적으로 저장할 때 사용한다.
  • 삽입한 순서대로 저장된다.
  • 파이썬의 경우 List는 이미 생성된 경우에는 수정이 가능하다. (mutable한 자료형)
  • 같은 값도 여러번 삽입할 수 있다.
  • Multi-dimensional Array( 다중차원 배열 )
    • Array의 요소로 Array를 삽입할 수 있다.

2차원 Array 예시

 

Array 구조

메모리에 할당된 Array

  • 0부터 시작하는 Index라는 요소로 Array의 각 요소에 접근 가능하다.
  • 파이썬의 경우 음수로도 Index를 사용할 수 있는데, 이 경우 -1은 Array의 마지막 요소를 가리킨다.
  • Array가 실제 메모리에 할당된 것을 보면 순차적으로 데이터를 저장할 수 밖에 없다는 것을 알 수 있다.
    • 순서가 있으므로 Index를 사용할 수 있고, 이 Index를 사용해서 Array의 특정 위치의 데이터를 읽을 수 있으며, 특정 부분만 Slicing해서 사용할 수도 있다.

 

Array의 잘 알려진 단점

  • 값의 추가 또는 삭제
    • 이 경우는 단순하게 Array의 마지막에 값을 추가하거나 삭제하는 것이 아닌, 중간에 값을 끼워넣거나 삭제하는 경우에 해당된다.
    • 추가의 경우 필요한 작업순서는 다음과 같다.
      1. 새로운 array를 선언한다. 이 때는 원래의 길이에 1을 더한 길이의 array를 선언해야 함.
      2. 원본 array의 데이터 중에서 추가될 위치 앞의 데이터를 삽입한다.
      3. 추가할 값을 새로운 array에 삽입한다.
      4. 원본 array의 남은 데이터를 마저 삽입한다.
    • 삭제의 경우도 비슷한 작업순서를 가진다.
    • 이와 같이 값의 추가와 삭제가 그리 용이한 자료구조가 아니란 것을 알 수 있다. 따라서 Array의 경우는 데이터가 자주 추가되거나 삭제되는 경우에는 사용을 지양하는 것이 좋다.
  • 크기의 조절
    • Array의 경우는 사용하기 위해서 선언을 할 때 크기를 지정하는 방법을 사용한다.
    • 데이터가 계속 추가될 때, 초기에 특정한 크기를 넘어가는 경우가 생길 때 추가할 크기 또한 전에 선언한 Array에 연속해서 할당되어야 한다.
    • 과정은 위의 값의 추가 또는 삭제의 경우와 비슷하게 작동한다. 단 대부분의 언어는 이 작업을 자동으로 수행하는 편이다.
    • 비슷한 사유로 인해서 Array의 경우는 데이터의 길이를 특정하기 어려운 경우에는 사용을 지양해야 한다.

 

Array를 언제 사용하면 좋은가?

  • 순차열적인 데이터를 다룰 때
    • 예를 들면 값보다는 순서가 중요한 데이터를 사용할 때
  • 다차원 데이터를 다룰 때
  • 특정 요소에 바로 접근할 필요가 있을 때
    • Index를 사용하면 된다.
  • 데이터의 사이즈가 급격하게 변하지 않거나, 자주 추가 또는 삭제되지 않을 때

 

 

 

Tuple의 특징

  • List와 비슷하게 순차적으로 데이터를 저장할 수 있는 자료형
  • 단, 한번 정의되고 나면 이후 수정할 수 없다. (immutable한 자료형)
  • 적은 수의 데이터 그룹을 저장할 때 주로 사용한다.
  • 함수에서 한개 이상의 값을 리턴하고 싶을 때 사용된다.
  • 튜플은 모든 언어에서 지원하는 자료형이 아니다!

 

Tuple의 장점과 단점

  • 장점
    • 여러개의 값을 리턴하고 싶은 함수에 적용할 수 있다.
    • 간단한 값을 빠르게 표현할 수 있다.
  • 단점
    • 내부 데이터의 의미가 명확하지 않다.
      • 따라서 소규모의 데이터를 다루기에 적합하다.

 

Tuple를 언제 사용하면 좋은가?

  • 간단한 데이터를 표현할 때
  • List보다 자원을 더 적게 차지하므로 최적화를 확실하게 진행해야 할 때