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 |