Python

[자료구조] 배열(Array)

lucKipyo 2024. 1. 1. 23:01
728x90
반응형
배열
  • 여러개의 변수를 담는 공간
  • 인덱스(index)가 존재하고, 인덱스는 0부터 시작
  • 특정한 인덱스에 직접적으로 접근 가능함
배열의 특징

 

컴퓨터의 메인 메모리에서 배열의 공간은 연속적으로 할당됨

  • 장점: 캐시(cache) 히트 가능성이 높고, 조회가 빠름
    • 캐시 = CPU 보다는 느리지만 좀 더 넓은 공간
    • 램에 비해 공간은 작지만 속도는 빠름
    • 램에 있는 데이터 일부를 캐시메모리에 옮겨서 사용한다는 말임
    • 캐시를 사용하면 array는 각각의 데이터가 인접한 공간에 묶여있어 한꺼번에 캐시 메모리로 옮길 수가 있음
  • 단점: 배열의 크기를 미리 지정하는 것이 일반적이기 때문에 데이터 추가, 삭제에 한계가 있음

 

리스트 컴프리헨션(List Comprehension)

  • 파이썬에서는 임의의 크기를 가지는 배열을 만들 수 있음
  • 일반적으로 리스트 컴프리헨션을 사용
크기가 N인 1차원 어레이 만드는 방법

 

n = 4
arr = [0] * n
print(arr)
# [0, 0, 0, 0] <- 실행결과

n = 4
arr = [i for i in range(n)]
print(arr)

# [0, 1, 2, 3] <- 실행결과

 

크기가 N x M 인 2차원 어레이 만드는 방법
n = 3
m = 5
arr = [[0] * m for i in range(n)]
print(arr)

# [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] <- 실행결과

 

어레이 초기화시에 알아둘점
  • 리스트는 기본적으로 메모리 주소를 반환한다.
  • 단순히 [[ 0 ] * m] * n 형태로 어레이 초기화를 하면 안됨
    • 이렇게 초기화 할경우 n 개의 [0] *m 리스트는 모두 같은 객체로 인식됨
    • 같은 메모리(동일한 리스트)를 가리키는 n 개의 원소를 담는 리스트가됨
n = 3
m = 5
arr1 = [[0] * m] * n
arr2 = [[0] * m for i in range(n)]

arr1[1][2]=1
arr2[1][2]=1

print(arr1)
print(arr2)

# [[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]] <- 실행 결과
# [[0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] <- 실행 결과


# 좀더 보기쉽게 바꾸면 이런모양 

[
  [0, 0, 1, 0, 0], 
  [0, 0, 1, 0, 0], 
  [0, 0, 1, 0, 0]
]

[
  [0, 0, 0, 0, 0], 
  [0, 0, 1, 0, 0], 
  [0, 0, 0, 0, 0]
]

 

728x90
반응형