사실 우리는 이미 동적 배열을 사용하고 있었는데요. 파이썬 리스트가 바로 동적 배열입니다. C 배열을 이용해서 동적 배열을 구현한 거죠.
int_list = [2, 3, 5, 7, 11]
이렇게 5개의 정수 값이 들어간 파이썬 리스트를 만들었습니다. 파이썬 리스트는 동적 배열이기 때문에, 내부적으로는 C 배열이 만들어진 거죠.
int_list.append(13)
여기에 새로운 값을 추가할 수도 있습니다.
우리 입장에서는 내부적으로 얼마나 큰 배열이 있는지 몰라도, 값을 맘대로 추가할 수 있습니다. 동적 배열이기 때문에 상황에 맞게 배열 크기가 조절되고 있는 거죠.
자 그런데, 우리는 리스트를 사용할 때 현재 내부적으로 사용되고 있는 배열의 크기를 모릅니다. 아무리 저장한 데이터가 6개여도 내부적으로는 8개짜리 배열일 수도 있고, 12개짜리 배열일 수도 있고, 15개짜리 배열일 수도 있고… 알 수가 없습니다.
그럼 만약 리스트의 길이를 출력하면 뭐가 나올까요? len 함수를 쓰면 길이를 알 수 있죠?
print(len(int_list))
6
6이라고 나오는데요. 실제 사용하고 있는 메모리 공간이 더 많을지라도, 파이썬은 개수를 셀 때 값을 저장해 놓은 공간에 대해서만 알려 줍니다. 그래서 우리는 나머지 공간에 대해서 전혀 신경을 안 써도 됩니다.
오히려 채워지지 않은 공간을 접근하려고 하면…
print(int_list[9])
오류가 납니다.
우리가 미리 값을 저장해 놓은 공간에만 접근할 수 있도록 파이썬이 미리 처리를 해 놓은 겁니다.
파이썬뿐만 아니라, 동적 배열을 자료형으로 제공하는 대부분의 언어들은 이렇게 실제 사용하는 배열의 크기와 상관없이 저장해 놓은 공간만 사용할 수 있게 처리를 해 줍니다.
'Algorithm > 자료구조' 카테고리의 다른 글
[링크드 리스트] 링크드 리스트 __str__ 메소드 (0) | 2023.07.31 |
---|---|
[배열] 동적 배열 크기 줄이기 (0) | 2023.07.31 |
[배열] 동적 배열 삭제 연산 (0) | 2023.07.31 |
[배열] 분할 상환 분석 적용 (0) | 2023.07.28 |
[기본 자료 구조] 데이터의 주소 (0) | 2023.07.27 |