supergravity
intro 파이썬 메모리 관리 본문
<!-- 오늘 뭐할지 -->
이번 영상은 어떻게 파이썬이 변수들을 메모리에 저장하는지에 대해서 이야기 해봅시다.
<!-- 제일 처음해야 하는일 -->
우리가 처음으로 해야 할일은 RAM또는 random access memory에 대해서 알아야합니다.
<!-- 램의 간단 설명및 예제 -->
->
램은 기본적으로 데이터를 저장합니다. 파이선에서는 저번에 영상에서 언급한 변수와 오브잭트 들입니다.
->
만약 리그오브 레전드와 인터넷 방송탭을 실행하고 컴퓨터를 사용한다고 하면. 컴퓨터의 램위에 모두 저장되어 있습니다.
->
내가 욕심이 많아 리그오브레전드도 키도 인터넷 방송도키고 배틀그라운드도 키고 메이플 스토리도 키면 어떻게 될까요?
컴퓨터마다 차이가 있겠지만 램위에 어플리케이션을 실행하는데 필요한 변수, 함수등과 같은 것들이 올라가 있고 지속적으로 이들을 관리해야 하기떄문에 느려질것입니다.
또한 진짜 많이 사용하면 메모리가 뻗어서 컴퓨터가 멈출수도 있습니다.
<!-- 램 그림 등장 그리고 구체적인 설명-->
-> 프로그램들의 모든 객체와 변수들을 저장하고 관리하기 위해서 램은 공간을 나누어 사용역활을 나누어 놨습니다.
-> 그림에는 많은 부분이 나누어져 있지만 파이썬에서 변수와 오브잭트가 저장되는 부분은 스택과 힙입니다.
-> 스택의 경우 데이터를 넣을수록 위에서부터 차오르고 파이썬 변수의 레퍼런스가 저장되는 영역입니다.
-> 힙의경우 데이터를 넣을수록 아래서부터 차오릅니다. 그리고 변수의 오브잭트들이 저장되는 공간입니다.
-> 지속적으로 데이터를 넣다보면 스택과 힙이 만나고 메모리 용양을 초과해 오류가 날수 있습니다.
<!-- 파이썬 실제 예제 -->
-> 그러면 변수에 정수 오브잭트를 넣었을때 메모리 변화가 어떻게 되는지 살펴봅시다.
-> 변수 a에는 3 b에는 5 c에는 7일 들어 있습니다.
```
a = 3
b = 5
a = 5
c = 5
```
-> 그러면 파이썬 코드가 실행되었을때 메모리가 어떻게 되는지 확인해 봅시다.
-> 파이썬은 위에서 아래로 한줄씩 읽으면서 동작합니다.
-> 에이 변수를 만났을떄 파이썬은 스택에 파이썬 레퍼런스를 생성합니다.
-> 여기서 레퍼런스란? data가 한개인 datum 숫자 한개에 접근할수 값입니다.
-> 파이썬에서 레퍼런스를 메모리 주소값을 이용하여 구현하고 있습니다.
-> 그러면 코드가 실행되었을때 다시 돌아와 생각을 해봅시다.
-> 파이썬이 a = 3을 만나면 변수의 레퍼런스와 오브잭트를 생성하여 스택과 힙에 올려 놓습니다.
-> 그림(올려저 있음)
-> b = 3을 만나면 변수 b의 레퍼런스와 인스턴스를 생성해 스택과 힙에 올려 놓습니다.
-> 그림
-> a = 5을 만나면 a의 레퍼런스가 이미 존재하기 때문에 레퍼런스 값만 오브잭트 5의 주소값으로 변경합니다.
-> c =5를 만나면 c의 레퍼런스를 생성하고 스택에 올립니다. 오브잭트 5의값은 이미 존재 하기 때문에 c의 레퍼런스 값을 오브잭트 5의 주소값으로 저장합니다.
-> 여기까지 진행된 메모리를 보면 오브잭트 5에는 2개의 레퍼런스가 존재하고 있고 오브잭트 3에는 0개의 레퍼런스가 존재 합니다.
-> 여기서 3이라는 오브잭트를 구지 남겨놓을 필요가 없습니다.
-> 그래서 파이썬은 오브잭트의 레퍼런스가 0인 오브잭트를 삭제하여 메모리 낭비를 줄입니다.
-> 메모리 낭비를 줄이기 위해 자동으로 이를 처리해주는 것을 가비지 컬렉션이라 하는데 지금은 어려우니까 나중에 시간되면 알아봅시다.
<!-- 함수 안의 변수가 메모리관리->
-> 우리가 작성한 파이썬 코드를 실행하게 되면
-> 파이썬 코드가 어떻게 실행되는지(컴파일, 런타임)
-> 컴파일러 예 cpython만 있는게 아니라 다양하다
-> 컴파일 시간에 저장되는 것들
-> 런타임 시간에 저장되는 것들
-> 함수호출의 다양한 예
파이썬에서 메모리 관리를 어떻게 하는지에 대한 영상 내용
https://www.youtube.com/watch?v=arxWaw-E8QQ
진짜 좋다 컴터 과학 파이썬, 이거 좋다. 이걸로 가자
https://www.youtube.com/watch?v=OdQSWuG78Sk&t=547s
'개발중 기억해야 할만한 것들 > 파이썬' 카테고리의 다른 글
파이썬 - 스트링 파싱 (0) | 2021.08.26 |
---|---|
파이썬 - 문자열체크 정규식 (x) (0) | 2021.08.24 |
파이썬 - 재귀 초과? 왜? (0) | 2021.08.18 |
파이썬 - 재귀함수 return none (0) | 2021.08.17 |
파이썬 - 재귀에서 return 이랑 아닌거 차이 (0) | 2021.08.13 |