실험을했습니다.. arr = [1,2,3] print(id(arr[0]),id(arr[1]),id(arr[2])) 찍으면 140714884457296 140714884457328 140714884457360 주소값이 이렇게 나옵니다.. 레퍼런스의 크기를 32바이트 라고할수있고 그러면 32바이트에 레퍼런스가 연속적으로 있어 총 32 * 3 = 96의 메모리를 할당한거 아닌가요?
+0
2020년 4월 16일
제가 작성하면서 다른 언어의 리스트랑 헷갈렸나봐요 ㅋㅋㅋ 실험해보고 계산도 잘못했었나보네요!
파이썬은 리스트 자료형이 동적배열이라 메모리상에서 연결되어 있습니다. 그래서 실험을 해보셔서 아시겠지만 연속된 메모리로 자료형의 크기만큼 공간을 차지하며 연결되어 있습니다.
위에 작성한 글은 간단하게 수정해놓겠습니다
+0
2022년 11월 25일
윗 댓글에 이어서 추가적으로 테스트를 했습니다. arr[0] = 4 print(id(arr[0])) arr[0] = 1 print(id(arr[0])) arr[0] = 2 print(id(arr[0])) arr[0] = 3 print(id(arr[0])) .. 이와 같은 경우 메모리에 실제 저장된 값이 이미 존재한다면 그 값의 주소를 레퍼런스로 넣어주는 것으로 보이네요. 이에 대하여서는 메모리가 어느정도 차서 GC가 돌기전에는 여러군데에서 동일한 값이라면 같은 주소를 레퍼런스로 넣어주는 것으로 보이는데요.. 제가 말한게 맞는지요? 확신이 안서네요
댓글 3개
arr = [1,2,3]
print(id(arr[0]),id(arr[1]),id(arr[2]))
찍으면
140714884457296
140714884457328
140714884457360
주소값이 이렇게 나옵니다.. 레퍼런스의 크기를 32바이트 라고할수있고
그러면
32바이트에 레퍼런스가 연속적으로 있어 총 32 * 3 = 96의 메모리를 할당한거 아닌가요?
파이썬은 리스트 자료형이 동적배열이라 메모리상에서 연결되어 있습니다.
그래서 실험을 해보셔서 아시겠지만 연속된 메모리로 자료형의 크기만큼 공간을 차지하며 연결되어 있습니다.
위에 작성한 글은 간단하게 수정해놓겠습니다