nan + nan = 2nan

[Python] List(리스트) 본문

Python

[Python] List(리스트)

2nan 2023. 5. 7. 14:43
728x90

평소 파이썬으로 개발을 하다보면 주로 List를 사용하게 된다.

가장 먼저 접하기도 했고, 삽입 / 수정 / 삭제 / 중복 허용 등 이점이 많아서 주로 리스트를 사용하게 되는 것 같다.

프로젝트 당시, Array를 사용할 일이 있었는데 그 때 당시에는 리스트와의 차이점을 제대로 이해하지 못하고

구글링에 의존하며 하나하나 찾아가며 해결을 했던 기억이 갑자기 나서 한 번 정리를 하고 넘어가려고 한다.

참고로, 파이썬에서는 기본적으로 List만 지원한다. Array는 NumPy 라이브러리로 사용 가능하다.

 

List 


리스트는 보통 파이썬에서 대괄호로 표현이 된다.
아직 다른 언어를 많이 접해보지 못해서 다를 수도 있지만 대부분 대괄호로 표현하지 않을까 싶다.

list_example = ['This', 'is', 'example']

 

성격은?

  1. 배열의 문제점을 해결하기 위한 자료구조이다.
    1. 아래에서 살펴보겠지만, array와는 다르게 데이터를 빈틈없이 쌓는다.
      만약 위의 예시 리스트에서 'is' 원소를 삭제할 경우, 뒤에 있는 example 원소가 앞의 원소와의 간격이 없이
      연속적으로 위치한다.
  2. 원소들 간 순서가 존재한다.
    1. 위의 리스트에서 첫번째 데이터를 출력하면 'This', 두번째 데이터는 'is'가 나온다.
      ex) list_example[0] => 'This' (인덱싱의 첫번째는 0부터 시작한다)
  3. 리스트에서의 인덱스데이터의 순서 정도를 나타낸다.
  4. 빈 엘리먼트는 허용하지 않는다.
  5. 원소들의 순차성이 고정적이지 않아 spatial locality(한 번 접근한 데이터로부터 주변 데이터를 또 사용할 것이라고 생각해 그 주변을 데이터까지 캐시로 가져오는 것)이 보장되지 않는 문제가 있어 cache hit(요청한 데이터가 캐시에 존재하는 경우)가 어렵다.
  6. Python에서 list를 기본적으로 지원
# 리스트 선언 예시
example = list() 
example = []

 


List와 Array의 차이점


 

List

- 리스트는 인덱스를 가지지만, 이는 해당 데이터가 몇번째 데이터인지 정도를 의미함.
- 리스트는 값의 추가 및 삭제 등이 가능하기 때문에, 주소값이 항상 일정하지 않음
- 이 때문에 메모리 주소가 연속적이지 않을 수도 있다
- 그래서 데이터를 찾을 때, 직접적인 접근이 불가능하고 처음부터 찾아야 한다.
- 하지만 파이썬의 List는 배열처럼 구현이 되어 있어, 메모리 상의 연속적인 위치에 배치된다.
- 이로 인해 인덱스를 사용하여 접근이 가능하다.

Array

- Array는 인덱스가 존재한다.
- 해당 인덱스를 통해 데이터의 위치에 대해 직접적인 접근이 가능하다.
- Array 생성 시, 미리 배열의 크기를 지정해야 하고 고정된 배열의 크기 때문에 데이터의 추가 및 삭제가 불편
- 미리 배열의 크기가 지정되어 있기 때문에, 반드시 할당된 공간은 연속적으로 존재한다.
- 이 때문에, 데이터를 조회하는 속도가 빠르다. cache hit에 대한 가능성이 높아진다.

 

spatial locality나 cache hit와 같은 부분은 대략적으로 내용이 이해는 되지만, 
아직 CS에 대한 지식이 부족해서 정확하게 이해가 되진 않는다.

차후 해당 내용과 정처기 공부를 통해 CS 지식을 더 쌓아봐야겠다.

 

 

 

 

Comments