본문 바로가기
Computer Science

#4 python의 메모리 할당과 관리 (Class와 self)

by 데이터현 2021. 12. 29.

https://hkim-data.tistory.com/182

 

#3 python의 메모리 할당과 관리 (Stack & Heap Memory)

https://hkim-data.tistory.com/181 #2 python의 메모리 할당과 관리 (Everything is object in Python) 2021.12.29 - [Comuter Science] - #1 python 메모리 구조 #1 python 메모리 구조 최근 기술면접에서 메모..

hkim-data.tistory.com

지난 포스팅에 이어서 이번엔 class 수준에서 어떻게 메모리가 할당되고 삭제되는지 알아보자.

위와 같이 Car 클래스를 선언했다고 하자.

Car 클래스에서는 생성자 init 메서드와 getWheels 메서드가 있다.

main 함수에서 위와 같은 코드를 사용했다고 해보자.

 

1. c = Car(4)

 

main function에 지역변수 c가 스택 메모리에 저장되고

힙 메모리에는 Car 객체가 생성된다.

생성자 init 메소드가 실행된다.

__init__ 메소드에 의해 지역변수 wself매개변수로 불러오는데,

selfCar 객체를 가리키는 참조자 역할을 하게 된다.

self와 c는 heap 메모리상의 객체 Car를 가리키는 참조자다.

 

self.wheels = w에 의해

매개변수 w가 참조하는 4라는 객체

Car 클래스의 wheels변수도 동일하게 참조하게 된다.

그동안 self가 정확하게 뭘 의미하는지 모르고 사용했는데 반성해야겠다.

self는 stack 메모리 상에서 heap 메모리의 객체에 접근하기 위한 참조자였던 것..!

2. n = c.getWheels()

c.getWheels 에 의해 Car 클래스의 getWheels() 메소드를 불러오게 되고,

아래와 같이 stack 메모리에 getWheels 메서드가 쌓이게 되고,

getWheels의 파라미터 self는 Car 객체를 참조하고 있다.

 

self.wheels라는 뜻은 Car 객체의 어트리뷰트 wheels가 참조하고 있는 값이 되겠다.

즉, 4 객체를 return 하게 된다.

n은 self.wheels가 참조하는 4객체를 참조하게 된다.

return 했으므로 마찬가지로 getWheels 메서드는 스택 메모리에서 해제된다.

 

3. print(n)

print(n)을 실행하게 되면 무슨 일이 일어날까?

print( ) 함수가 스택 메모리에 쌓인다.

매개변수로 넘겨진 n은 4 객체를 참조하고 있다.

따라서 4를 출력한다.

 

다음 포스팅은 python의 가비지 컬렉터가 어떻게 동작하는지 알아보겠다.

https://hkim-data.tistory.com/184

 

#5 python의 메모리 할당과 관리 (Garbage Collection)

 

hkim-data.tistory.com

 

 

참조

https://www.youtube.com/watch?v=arxWaw-E8QQ 

댓글