파이썬에서의 Array
- 파이썬에서는 Array가 따로 존재하지만 일반적인 경우에는 List 자료형을 사용한다.
Array의 특징
- 데이터를 순차적(Ordered)으로 저장한다.
- 서로 연결된 데이터를 순차적으로 저장할 때 사용한다.
- 삽입한 순서대로 저장된다.
- 파이썬의 경우 List는 이미 생성된 경우에는 수정이 가능하다. (mutable한 자료형)
- 같은 값도 여러번 삽입할 수 있다.
- Multi-dimensional Array( 다중차원 배열 )
- Array의 요소로 Array를 삽입할 수 있다.
Array 구조
- 0부터 시작하는 Index라는 요소로 Array의 각 요소에 접근 가능하다.
- 파이썬의 경우 음수로도 Index를 사용할 수 있는데, 이 경우 -1은 Array의 마지막 요소를 가리킨다.
- Array가 실제 메모리에 할당된 것을 보면 순차적으로 데이터를 저장할 수 밖에 없다는 것을 알 수 있다.
- 순서가 있으므로 Index를 사용할 수 있고, 이 Index를 사용해서 Array의 특정 위치의 데이터를 읽을 수 있으며, 특정 부분만 Slicing해서 사용할 수도 있다.
Array의 잘 알려진 단점
- 값의 추가 또는 삭제
- 이 경우는 단순하게 Array의 마지막에 값을 추가하거나 삭제하는 것이 아닌, 중간에 값을 끼워넣거나 삭제하는 경우에 해당된다.
- 추가의 경우 필요한 작업순서는 다음과 같다.
- 새로운 array를 선언한다. 이 때는 원래의 길이에 1을 더한 길이의 array를 선언해야 함.
- 원본 array의 데이터 중에서 추가될 위치 앞의 데이터를 삽입한다.
- 추가할 값을 새로운 array에 삽입한다.
- 원본 array의 남은 데이터를 마저 삽입한다.
- 삭제의 경우도 비슷한 작업순서를 가진다.
- 이와 같이 값의 추가와 삭제가 그리 용이한 자료구조가 아니란 것을 알 수 있다. 따라서 Array의 경우는 데이터가 자주 추가되거나 삭제되는 경우에는 사용을 지양하는 것이 좋다.
- 크기의 조절
- Array의 경우는 사용하기 위해서 선언을 할 때 크기를 지정하는 방법을 사용한다.
- 데이터가 계속 추가될 때, 초기에 특정한 크기를 넘어가는 경우가 생길 때 추가할 크기 또한 전에 선언한 Array에 연속해서 할당되어야 한다.
- 과정은 위의 값의 추가 또는 삭제의 경우와 비슷하게 작동한다. 단 대부분의 언어는 이 작업을 자동으로 수행하는 편이다.
- 비슷한 사유로 인해서 Array의 경우는 데이터의 길이를 특정하기 어려운 경우에는 사용을 지양해야 한다.
Array를 언제 사용하면 좋은가?
- 순차열적인 데이터를 다룰 때
- 예를 들면 값보다는 순서가 중요한 데이터를 사용할 때
- 다차원 데이터를 다룰 때
- 특정 요소에 바로 접근할 필요가 있을 때
- Index를 사용하면 된다.
- 데이터의 사이즈가 급격하게 변하지 않거나, 자주 추가 또는 삭제되지 않을 때
Tuple의 특징
- List와 비슷하게 순차적으로 데이터를 저장할 수 있는 자료형
- 단, 한번 정의되고 나면 이후 수정할 수 없다. (immutable한 자료형)
- 적은 수의 데이터 그룹을 저장할 때 주로 사용한다.
- 함수에서 한개 이상의 값을 리턴하고 싶을 때 사용된다.
- 튜플은 모든 언어에서 지원하는 자료형이 아니다!
Tuple의 장점과 단점
- 장점
- 여러개의 값을 리턴하고 싶은 함수에 적용할 수 있다.
- 간단한 값을 빠르게 표현할 수 있다.
- 단점
- 내부 데이터의 의미가 명확하지 않다.
- 따라서 소규모의 데이터를 다루기에 적합하다.
- 내부 데이터의 의미가 명확하지 않다.
Tuple를 언제 사용하면 좋은가?
- 간단한 데이터를 표현할 때
- List보다 자원을 더 적게 차지하므로 최적화를 확실하게 진행해야 할 때
'wecode > TIL 정리' 카테고리의 다른 글
위코드 Foundation - HTTP RESTful API의 기본 (0) | 2020.08.08 |
---|---|
위코드 Foundation - HTTP에 대해서 (0) | 2020.08.08 |
위코드 Pre Course - 파이썬의 Co-routine (0) | 2020.07.28 |
위코드 Pre Course - 웹 크롤링 (0) | 2020.07.28 |
위코드 Pre Course - 파이썬의 Process (0) | 2020.07.27 |