CodeGym /행동 /Python SELF KO /고정 크기 배열

고정 크기 배열

Python SELF KO
레벨 52 , 레슨 2
사용 가능

9.1 고정 크기 배열의 특징

고정 크기 배열은 생성 시 크기가 결정되고 프로그램 실행 중 변경될 수 없는 배열이야. Python에서 고정 크기 배열은 array 라이브러리를 사용하여 만들 수 있거나, 리스트를 사용할 수 있어. 비록 Python 리스트는 크기를 변경할 수 있지만, 다른 언어의 배열처럼 사용할 수 있어.

고정 크기 배열의 특징:

  • 고정 크기: 배열의 크기는 생성 시 결정되고 변경할 수 없어.
  • 동일한 타입: 배열의 모든 요소는 같은 타입이어야 해.
  • 빠른 인덱스 접근: 배열 요소에 접근하는 시간은 일정한 O(1) 시간이 걸려.
  • 크기 불변: 배열의 요소 수는 일정하며, 새로운 요소를 추가할 수 없어.

Python에서 고정 크기 배열 생성 예제:

array 라이브러리를 사용하는 경우:


import array

# 정수형 배열 생성 (int 타입을 'i'로 지정)
arr = array.array('i', [1, 2, 3, 4, 5])

# 요소에 접근
print(arr[2])  # 결과: 3

# 요소 값 변경
arr[2] = 10
print(arr)  # 결과: array('i', [1, 2, 10, 4, 5])

리스트를 사용하여 (고정 크기 배열을 흉내내기):


# 고정 크기 리스트 생성
arr = [0] * 5

# 요소 초기화
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5

# 요소에 접근
print(arr[2])  # 결과: 3

# 요소 값 변경
arr[2] = 10
print(arr)  # 결과: [1, 2, 10, 4, 5]

9.2 고정 크기 배열의 장단점

모든 것에는 장단점이 있지, 고정 배열도 마찬가지야.

장점:

  • 빠른 인덱스 접근: 배열의 모든 요소에 일정한 O(1) 시간에 접근할 수 있어서 데이터 읽기에 아주 효율적이야.
  • 간단한 구현: 배열은 이해하고 사용하기 쉬우며, 다양한 작업에서 쉽게 구현 및 사용할 수 있어.
  • 효율적인 메모리 사용: 배열의 크기가 고정되므로 생성 시 메모리가 한 번에 할당되어 메모리 재할당의 비용을 피할 수 있어.
  • 예측 가능성: 배열의 고정 크기는 메모리 관리와 자원 사용의 예측성을 높여줘.

단점:

  • 크기 불변: 배열의 크기는 생성 시 결정되고 변경할 수 없어. 따라서 필요한 배열 크기를 미리 알아야 하거나 과도하게 메모리를 할당할 위험이 있어.
  • 삽입 및 삭제 비용: 요소의 삽입 및 삭제는 시간이 많이 걸릴 수 있는데, 요소를 이동시켜야 하기 때문이야. 최악의 경우 배열 중간에 요소를 삽입하거나 삭제하는데 O(n) 시간이 소요돼.
  • 비효율적인 메모리 사용: 배열이 완전히 사용되지 않으면 남은 메모리 셀이 채워지지 않아 메모리가 비효율적으로 사용될 수 있어.
  • 제한된 유연성: 배열은 크기를 동적으로 변경할 수 없어서 리스트 같은 동적 데이터 구조에 비해 덜 유연해.

9.3 사용 및 응용 예제

고정 크기 배열 사용 및 응용 예제를 몇 가지 살펴보자.

예제 1: 테이블과 행렬

고정 크기 배열은 크기가 미리 알려진 테이블과 행렬을 표현하는 데 자주 사용돼.


import numpy as np

# 고정 크기 3x3 행렬 생성
matrix = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

# 행렬 요소에 접근
print(matrix[1][2])  # 결과: 6

# 행렬 요소 변경
matrix[1][2] = 10
print(matrix)
# 결과:
# [[ 1  2  3]
#  [ 4  5 10]
#  [ 7  8  9]]

예제 2: 버퍼와 캐시

고정 크기 배열은 크기가 미리 정해져 변경되지 않는 버퍼와 캐시를 만드는 데 사용돼.


# 데이터 읽기용 고정 크기 버퍼
buffer_size = 1024
buffer = bytearray(buffer_size)

# 데이터를 버퍼에 씀
data = b"Hello, World!"
buffer[:len(data)] = data

print(buffer[:len(data)])  # 결과: b'Hello, World!'

예제 3: 시간과 날짜 데이터 저장

고정 크기 배열은 월별 일수와 같은 시간과 날짜 데이터를 저장하는 데 사용할 수 있어.

이 예제에서는 list 클래스를 통해 고정 배열의 동작을 에뮬레이션 해봅시다:


# 각 달의 일 수 (평년)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

# 데이터 접근
month = 2  # 2월
print(f"2월에는 {days_in_month[month - 1]} 일이 있습니다")  # 결과: 2월에는 28 일이 있습니다
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION