ROKO

[Python] Memory management 본문

Computer Science/Programming Language

[Python] Memory management

RO_KO 2023. 3. 2. 22:35
728x90

Python은 OOP이다. 객체를 이용해 프로그래밍을 한다는 뜻인데, 객체가 너무 많아지게 되면 RAM에 부하가 늘어나면서 전체적인 프로그램의 성능이 낮아지게 될 것이다. 이미 사용된 객체는 어떻게 관리해야할까?

 

기본적으로 python은 사용자가 직접적으로 동적할당과 해제를 할 필요가 없는 언어이다. 모든 type이 이미 객체화가 되어 있기 때문이다.

 

그렇다면 heap영역을 쓰지 않는 걸까?

 

 그렇지 않다. 내부적으로 python memory manager가 존재하여 해당 객체가 사용될때 heap에 할당하여 자동적으로 메모리 관리를 해준다. 미리 할당하지 않고 사용시에 할당하는 방식은 OS heap 영역의 과부하를 막아주게 된다. 사용된 변수들은 reference counting 방법을 통해 GC(garbage collector)가 메모리를 해제해 관리해 준다. reference counting이란 해당 값이 더이상 가리키는 변수가 없는 경우 쓰지 않는다고 판단하고 GC가 데이터를 수거하는 방식이다.

 

직접적인 명령어로는 del 이 있다.

del x
# x에 연결된 변수와 객체의 관계를 해제

del은 메모리를 없애는 과정이 아닌 link를 없애는 함수라고 생각하면 된다. x 는 가리키는 변수가 없어지게 되고 GC가 알아서 reference counting을 통해 메모리를 없애준다. 주의 할 점은 del 자체가 해당 변수의 메모리를 바로 없애주는게 아니라는 점이다.

 

https://woochan-autobiography.tistory.com/867

 

Python - 메모리 구조 및 메모리 할당 과정

목차 Everything is object in Python 파이썬의 메모리 구조 파이썬에서의 Heap 사용 파이썬에서의 메모리 할당 과정 Everything is object in Python x = 10 print(type(x)) >> C에서 x = 10 이렇게 변수를 할당하면, 메모리

woochan-autobiography.tistory.com

 

728x90
Comments