원시 타입과 객체
원시 타입
C나 자바 같은 프로그래밍 언어들은 기본적으로 원시 타입(Primitive Type)을 제공한다. 특히 C언어는 동일한 정수형이라도 크기나 부호에 따라 매우 다양한 원시 타입을
제공한다.
원시 타입은 메모리에 정확하게 타입 크기만큼의 공간을 할당하고 그 공간을 오로지 값으로만 채워넣는다.
객체
객체의 메모리 할당
원시 타입은 메모리에 오로지 값으로만 채워넣지만, 객체는 메모리에 객체가 들어가게 됩니다. int형의 경우 int 객체가 메모리에 올라가고, 그 객체에는 값, 참조 횟수와 같은 유용한 정보가 담겨 있을 것입니다. 또 list형 같은 경우에는 시퀀스형 타입이며 단일 자료형이 아닌 여러 자료형을 가질 수 있는데, 이는 list 객체에는 바로 원소들을 저장하고 있는 것이 아니라 그 원소들의 객체를 가리키는 포인터 주소가 저장되어 있습니다.
변수 할당
파이썬의 경우 모든 것이 객체다. 파이썬에서 변수를 할당하는 작업은 해당 객체에 대해 참조를 한다는 의미다.
객체는 원시 타입과 같이 단순히 메모리에 숫자만 보관하고 있을 때는 하지 못했던 작업을 수행할 수 있게 된다. 예를 들어, 문자로의 변환, 16진수로 변환, 비트조작과 같은 것들이 있다. 다만 이를 위해서는 여러 가지 부가정보가 추가된다. 그로 인해 메모리 점유율이 늘어나고 계산 속도 또한 감소한다. 예로 int타입은 32비트지만 Integer 객체는 128비트의 공간을 차지한다. 또한 원시 타입의 경우 필요하면 메모리에서 값을 꺼내 연산을 하면 끝이지만, 객체는 타입코드를 찾는 등 여러 단계의 부가 작업이 필요하다.
클래스 | 설명 | 종류 |
---|---|---|
bool | 부울 | 불변 객체 |
int | 정수 | 불변 객체 |
float | 실수 | 불변 객체 |
str | 문자열 | 불변 객체 |
tuple | 튜플 | 불변 객체 |
list | 리스트 | 가변 객체 |
set | 세트 | 가변 객체 |
dict | 딕셔너리 | 가변 객체 |
메모리 관리
파이썬의 좋은 점은 파이썬의 모든 것이 객체라는 것입니다. 이것은 동적 메모리 할당이 파이썬 메모리 관리의 기초라는 것을 의미합니다. 객체가 더 이상 필요하지 않으면 Python 메모리 관리자가 자동으로 객체에서 메모리를 회수합니다.
Python은 C 프로그래밍 언어로 구현 된 고급 프로그래밍 언어입니다. Python 메모리 관리자는 Python의 메모리 할당을 관리합니다. 모든 파이썬 객체와 데이터 구조를 포함하는 개인 힙이 있습니다. Python 메모리 관리자는 요청시 Python 힙을 관리합니다. Python 메모리 관리자에는 객체 별 할당자가있어 int, string 등과 같은 특정 객체에 대해 메모리를 명확하게 할당 할 수 있습니다. 그 아래에서 원시 메모리 할당자는 운영 체제의 메모리 관리자와 상호 작용하여 개인 힙에 공간이 있는지 확인합니다.
Python 메모리 관리자는 “블록”이라는 메모리 청크를 관리합니다. 동일한 크기의 블록 모음이 “풀”을 구성합니다. 풀은 힙 = 64 풀에 할당 된 256kB 메모리 덩어리 인 Arena에서 생성됩니다. 객체가 파손되면 메모리 관리자는이 공간을 동일한 크기의 새 객체로 채웁니다.
메소드와 변수는 스택 메모리에 작성됩니다. 메소드와 변수가 작성 될 때마다 스택 프레임이 작성됩니다. 이러한 프레임은 메소드가 리턴 될 때마다 자동으로 제거됩니다.
오브젝트 및 인스턴스 변수는 힙 메모리에 작성됩니다. 변수와 함수가 반환 되 자마자 죽은 개체는 가비지 수집됩니다.
Python 메모리 관리자가 반드시 메모리를 운영 체제로 다시 릴리스 할 필요는 없으며 대신 메모리가 Python 인터프리터로 다시 리턴됩니다. 파이썬에는 작은 객체 할당자가있어 추후 사용을 위해 메모리를 할당합니다. 장기 실행 프로세스에서 사용되지 않는 메모리의 증분 예약이있을 수 있습니다.
Garbage collection
https://medium.com/dmsfordsm/garbage-collection-in-python-777916fd3189
https://rushter.com/blog/python-memory-managment/
https://wikidocs.net/13969
https://kamang-it.tistory.com/entry/%EB%8B%A4-%EC%93%B4-%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EC%88%98%EA%B1%B0%ED%95%B4%EC%A3%BC%EB%8A%94-%EA%B0%80%EB%B0%94%EC%A7%80%EC%BB%AC%EB%A0%89%ED%84%B0Garbage-CollectorGC-%EA%B8%B0%EB%B3%B8-%EC%9B%90%EB%A6%AC-%ED%8C%8C%ED%95%B4%EC%B9%98%EA%B8%B0