프로그래밍/자료구조 && 알고리즘

[Python] 배열(Array)

코드몬스터 2022. 9. 18. 18:12
728x90
💡  본 내용은 코드잇 기본 자료구조들 강의 및 신찬수 교수님의 자료구조 강의를 들고 요약한 내용입니다.

 

내용이 부족하거나 잘 못 될 수 있습니다.

추후 계속 공부하면서 수정하겠습니다~!!

 

👉 배열(Array)

가장 기본적인 순차적인(Sequential) 자료구조

 

 

C 언어의 배열

  • 크기가 고정돼 있다.
  • 지우거나 삭제 불가능
  • 같은 타입의 데이터만 담을 수 있다.
  • 메모리에 연속적으로 저장

 

python의 리스트

  • C의 배열과 다르게 연속적일 수 있고 아닐 수 있다.
  • 메모리에 값을 저장하는 것이 아닌 ★레퍼런스를 저장★
  • 따라서, 자료들의 크기가 상관이 없기 때문에 여러 타입들을 저장할 수 있다.

 

Question

파이썬은 레퍼런스도 저장하고 실제 값을 저장하는 곳도 따로 있나?

그래서 더 많은 메모리를 사용한다???

 

파이썬 리스트는 크기 변화에 대비하기 위해 실제로 사용하는 메모리보다 더 많은 메모리를 할당 받게 된다.

 

 

👉 배열(Array) 인덱스를 이용한 데이터 저장/접근법

💡 파이썬은 배열을 잘 사용 안하기 때문에 C 배열로 설명
  • numArray 는 메모리의 시작 주소를 가지고 있음
  • ★인덱스 i 주소 = 1000(시작주소) + 4(데이터 크기) * i(인덱스)★
  • 배열에서 값을 가져오는 것(인덱스 접근)은 O(1) 으로 가능

 

👉 배열 탐색

  • 접근은 인덱스로 값을 찾는 것(배열 접근 연산)
    • O(1)
  • 탐색은 특정 조건을 만족하는 값을 찾는 것(배열 탐색 연산)
    • O(n)

 

 

👉 정적 배열 / 동적 배열

정적배열(Static Array)

  • 기본적으로 배열이라고 하면 정적 배열을 의미
  • 크기 고정(요수 수 제한)

동적배열(Dynamic  Array)

  • 정적 배열의 크기를 상황에 맞게 조절한다.
  • 정적 배열로 만들어진 자료 구조
  • 크기 변함(요소 계속 추가 가능)

 

파이썬 리스트가 C 정적배열을 이용해서 동적 배열을 구현한 것

 

 

👉 동적 배열(Dynamic Array)

추가(append): 동적 배열 끝에 추가하는 것

삽입(insert): 아무 위치에 추가하는 것

 

C 언어

// 6개 크기의 배열을 생성
B = (int*)malloc(6*4)

 

 

파이썬

  • 삽입(Insert)는 값을 진짜 지우는 것이 아닌 ★다른 객체를 생성해서 새롭게 매핑★ 시켜주는 것
    (아닌것 같음 수정필요)
  • 즉, 원래 있던 값은 어디인가 존재하게 된다.
  • 삭제(remove)
A.append(6) 	# 맨 뒤에 6을 삽입
A.pop() 	# 맨 뒤의 값을 지우고 리턴
A.insert(1, 10) # A[1]에 10을 삽입
A.remove(value) # A 에서 value 제거
A.index(value)
A.count(value)
import sys

# 파이썬은 알아서 메모리 용량 관리를 해준다.
a = [] # 빈 리스트
print(sys.getsizeof(a)) # a의 실제 메모리 바이트 수 # 0 바이트 같지만 실제는 28 바이트
a.append(10)
print(sys.getsizeof(a)) # 48 bytes

 

👉 분할 상환

 

 

 

 

 

 

 

👉 배열과 동적 배열 정리/비교

 

'프로그래밍 > 자료구조 && 알고리즘' 카테고리의 다른 글

[탐색] DFS vs BFS - 간단 정리  (0) 2023.08.13
[Java] 큐(Queue)  (0) 2023.07.20
[Python] 해시 테이블(Hast Table)  (0) 2022.09.30
[Java] 배열(Array)  (0) 2022.09.27
[Python] 링크드 리스트(Linked List)  (0) 2022.09.18