CodeGym /행동 /Python SELF KO /동적 배열

동적 배열

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

10.1 동적 배열의 특징

동적 배열 — 실행 중에 크기를 변경할 수 있는 데이터 구조야. 프로그램을 실행하는 동안 원소를 추가하거나 삭제할 수 있어, 배열의 크기를 미리 정의할 필요가 없지.

Python에서 동적 배열은 리스트 (내장 클래스 list)야, 원하는 위치에 원소를 추가, 삭제, 변경할 수 있어.

Python 동적 배열의 특징

동적 배열의 특징:

  • 변경 가능한 크기: 필요한 만큼 동적 배열의 크기를 늘리거나 줄일 수 있어.
  • 빠른 인덱스 접근: 인덱스를 통해 원소에 접근하는 것은 O(1) 시간에 가능해.
  • 자동 메모리 관리: Python은 리스트의 메모리 할당과 해제를 자동으로 관리해줘.
  • 편리한 원소 조작 메서드: 내장 메서드를 통해 원소를 쉽게 추가, 삭제, 변경할 수 있어.

Python에서 동적 배열을 생성하고 사용하는 예:


# 리스트 생성
dynamic_array = [1, 2, 3, 4, 5]

# 원소 추가
dynamic_array.append(6)
print(dynamic_array)  # 출력: [1, 2, 3, 4, 5, 6]

# 원소 삭제
dynamic_array.remove(3)
print(dynamic_array)  # 출력: [1, 2, 4, 5, 6]

# 인덱스로 접근
print(dynamic_array[2])  # 출력: 4

# 원소 변경
dynamic_array[2] = 10
print(dynamic_array)  # 출력: [1, 2, 10, 5, 6]

10.2 동적 배열의 장점과 단점

동적 배열에는 장점과 단점이 있어. 더 자세히 살펴보자.

장점:

  • 유연성: 프로그램의 필요에 따라 크기를 조절할 수 있어, 메모리를 효율적으로 관리하고 다양한 양의 데이터를 처리할 수 있어.
  • 빠른 인덱스 접근: 정적 배열처럼 동적 배열도 인덱스를 통해 원소에 빠르게 접근 가능해, O(1) 시간이 걸려.
  • 사용 편의성: Python의 리스트 관련 내장 메서드(예: append, remove, insert)는 원소 조작을 쉽게 만들어줘서 코드가 더 읽기 쉽고 유지보수가 간편해.
  • 자동 메모리 관리: Python은 동적 배열의 메모리를 자동으로 관리해줘, 개발자는 수동으로 메모리를 할당하거나 해제할 필요가 없어.

단점:

  • 메모리 재배치: 동적 배열의 크기를 늘릴 때 메모리를 재배치해야 할 수 있고, 이는 새로운 메모리 영역으로 원소를 복사하는 과정을 수반해. 이로 인해 프로그램이 일시적으로 느려질 수 있어.
  • 삽입 및 삭제 비용: 배열 중간에 원소를 삽입하거나 삭제하려면 원소를 이동해야 해서 O(n) 시간이 걸려.
  • 관리 비용: C와 같은 저수준 언어와 비교했을 때, Python의 동적 배열은 자동 메모리 관리와 예외 처리 때문에 추가적인 오버헤드가 있어.

10.3 사용 예와 응용

Python에서 동적 배열의 사용 예시 몇 가지를 보자.

1. 동적 할일 리스트 구현:


tasks = []

# 할일 추가
tasks.append("Task 1")
tasks.append("Task 2")
tasks.append("Task 3")

# 할일 완료하고 리스트에서 삭제
completed_task = tasks.pop(0)
print(f"Completed: {completed_task}")
print(f"Remaining tasks: {tasks}")  # 출력: Remaining tasks: ['Task 2', 'Task 3']

2. 동적 객체 리스트 구현:


students = []

# 학생 추가
students.append("Alice")
students.append("Bob")
students.append("Charlie")

# 학생 삭제
students.remove("Bob")
print(f"Students after removal: {students}")  # 출력: Students after removal: ['Alice', 'Charlie']

# 특정 위치에 학생 추가
students.insert(1, "David")
print(f"Students after insertion: {students}")  # 출력: Students after insertion: ['Alice', 'David', 'Charlie']
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION