작성
·
314
1
안녕하세요.
그림부분에서 이해가 가지않아 질문 드립니다.
a =[1,2,3] 으로 초기화를하면 array는 0,1,2 즉 배열 그림이 3칸([][][])만 있어야 하는게 아닌가요?
하지만 강의의 그림에서는 [1][2][3][][] 으로 0,1,2,3,4 까지 그려져 있습니다. (size가 3인데 말이죠)
a.append(4) 를 했을때, 동적배열은 array로 구현이 돼어있기때문에 random access 가 가능하여 마지막 index를 찾을 수 있다고 하셨는데,
선언및 초기화
a = [1,2,3] // 그림 -> [1][2][3]
접근 a[0] // O(1)
수정 a[1] = 9 // 그림 [1],[9],[3]
추가 a.append(4) // 이때 Resizing 이 일어나
/* 그림
[1][9][3] // 값을 옮긴 후 삭제
[1][9][3][4][][] // 복잡도 O(n)
*/
의 모양이 돼야하는게 아닌가요?
즉, 궁굼한 점은 선언 및 초기화 할때 배열의 size 는 3인데그림의 배열 size는
[][][][][] 5칸이냐는 것입니다.
답변 1
0
안녕하세요 민코님.
사실 언어에서 dynamic array를 어떻게 구현했냐에 따라 다릅니다.
만약 그냥 static array를 선언 및 초기화 한다고 가정하면 민코님 말씀이 맞습니다.
하지만 dynamic array를 선언 및 초기화할 때는 민코님 말씀대로 딱 그 크기만큼 배열을 배정할 수 도 있고, 넉넉히 공간을 가진 배열을 배정할 수 있습니다.(제가 그림에 그린 것 처럼).
저는 강의에서 O(1)로 append 하는 경우와 O(n)으로 append 해야되는 경우를 나눠서 효과적으로 보여드려야 했기 때문에 적당한 크기인 5를 처음에 배정한 것 입니다.
큰 의미는 없으니 두루뭉술하게 넘어가셔도 되고, 혹시 마음에 걸리신다면 파이썬은 실제로 3개의 원소를 가진 dynamic array를 선언했을 때, 어느정도의 크기를 가진 배열을 제공해주는지 알아봐도 좋을 것 같아요 (알아보게 된다면 저도 알려주세요 ㅎㅎ )
궁금하신점이 더 있다면 언제든 말씀해주세요 :)