2021.12.29 - [Comuter Science] - #1 python 메모리 구조
이전 포스팅에 이어서 실제로 python에서 어떻게 메모리가 할당되고 해제되는지 알아보고자 한다.
Everything is object in Python
C에서는 x = 10을 실행하게 되면 x에 주소 값이 할당되고, 그 메모리에 10이라는 값이 들어간다.
그러나 python에서는 x = 10을 실행하게 되면
1. 10이라는 integer 객체가 메모리에 생성된다.
2. 10의 객체가 변수 x 에 의해 참조된다.
이번엔 y = x 명령어를 실행해 보자.
y라는 또 다른 참조 변수를 생성하고, y는 x가 참조하고 있는 10이라는 integer 객체를 동일하게 참조하게 된다.
둘의 id 값은 동일하다.
정말 동일할까?
sys의 getrefcount 메소드를 활용하면 참조하는 객체 수를 알 수 있다.
다음은 x = x + 1 일때의 경우다.
이 경우에는 11이라는 새로운 integer 객체가 생성되고 x는 이 객체의 주소 값을 참조하게 된다.
(실제로는 파이썬 내부적으로 이미 11이라는 객체를 사용 중 이지만 이해를 돕기 위해 생성된다고 표현)
z = 10 을 실행하게 되면
z라는 변수를 만들고 기존의 10의 객체를 참조하게 된다.
왜냐하면 python은 동일한 값을 가진 객체가 이미 존재하는 경우 새로운 변수에 동일한 객체 참조를 할당함으로써 메모리 사용을 최적화한다.
z = Car( )를 실행하게 되면 기존의 10 객체를 참조하지 않고 Car 클래스를 참조하게 된다.
이는 python이 dynamically typed language이기 때문에 가능하다.
다음 포스팅에선 실제로 stack과 heap 메모리에서 어떻게 동작하는지 알아보자.
https://hkim-data.tistory.com/182
참조
'Computer Science' 카테고리의 다른 글
#5 python의 메모리 할당과 관리 (Garbage Collection) (6) | 2021.12.30 |
---|---|
#4 python의 메모리 할당과 관리 (Class와 self) (0) | 2021.12.29 |
#3 python의 메모리 할당과 관리 (Stack & Heap Memory) (2) | 2021.12.29 |
#1 python 메모리 구조 (0) | 2021.12.29 |
python 알고리즘 정리 (0) | 2021.11.27 |
댓글