python 메모리 회수 메커니즘
1. 대상 및 인용 에 대한 간단 한 이해
python 의 할당 문 에서 예 를 들 어
a=1
, 매개 변수 a
은 하나의 인용 이 고 1
은 하나의 대상 이 며 a
이 가리 키 는 대상 1
을 참조 합 니 다.python 의 내장 함수 id()
은 대상 의 메모리 주 소 를 표시 할 수 있 습 니 다. 예 를 들 어:a = 1
b = a
print(id(a))
print(id(1))
print(id(b))
print(hex(id(1))) #
실행 결 과 는:
31163080 31163080 31163080 0x1e582c8L
설명: 대상
1
메모리 에 있 는 주 소 는 31163080
이 고 두 개의 인용 a
과 b
이 가리 키 는 대상 의 메모리 주소 도 31163080
이다.또한 두 인용 이 가리 키 는 대상 이 같은 대상 인지 판단 하려 면
is
으로 판단 할 수 있다. 예 를 들 어:a = 1
b = 1
print(a is b)
a = 1
b = a
print(a is b)
a = 1
b = 2
print(a is b)
실행 결 과 는:
True True False
숫자 와 문자열 의 대상 을 만 들 때 같은 숫자 나 문자열 이 라면 대상 이 가리 키 는 메모리 주소 가 같 습 니 다.다른 대상 을 만 들 때 대상 이 가리 키 는 메모리 주소 가 다 릅 니 다. 예 를 들 어:
#encoding=utf-8
a = 1.1
b = 1.1
print(id(a))
print(id(b))
a = 'Good morning '
b = 'Good morning '
print(id(a))
print(id(b))
a = [1,2,3]
b = [1,2,3]
print(id(a))
print(id(b))
a = (1,2,3)
b = (1,2,3)
print(id(a))
print(id(b))
실행 결 과 는:
32145944 32145944 43350368 43350368 43301960 43302600 32270952 32271744
2. 대상 참조 횟수 보기
sys
패키지 중 getrefcount()
함수 로 대상 의 인용 횟수 를 볼 수 있 습 니 다. 예 를 들 어:from sys import getrefcount
a = [1,2,3]
print(getrefcount(a))
b = [4,5,6]
c = [4,5,6]
print(getrefcount(b))
print(getrefcount(c))
d = [7,8,9]
e = d
print(getrefcount(d))
print(getrefcount(e))
실행 결 과 는:
2 2 2 3 3
설명: 의문점 1. 왜 매개 변수
a
대응 대상 의 인용 횟수 는 2 이지 1 이 아 닙 니까?이치 에 따 르 면
a = [1,2,3]
할당 문 구 는 한 번 의 대상 만 인용 한 것 으로 대상 [1,2,3]
의 인용 횟수 가 2
인 것 을 나타 내 는 이 유 는 getrefcount()
함 수 를 호출 할 때 매개 변 수 는 임시 인용 을 만 들 었 기 때문이다.의문점 2. 왜 매개 변수
b
과 c
대응 대상 의 인용 횟수 는 2
이 고 매개 변수 d
과 e
대응 대상 의 인용 횟수 는 3 입 니까?문장
b = [4,5,6]
과 c = [4,5,6]
은 두 개의 서로 다른 대상 을 만 들 었 고 대상 이 가리 키 는 메모리 가 다 르 기 때문에 b
과 c
대응 대상 의 인용 횟수 는 각각 두 번 이다.한편, 문장 d = [7,8,9]
과 e = d
은 하나의 대상 을 만 들 었 고 대상 이 가리 키 는 메모리 가 같 으 며 d
과 e
은 같은 대상 에 대응 하기 때문에 대상 의 인용 횟수 는 3
이다.3. 대상 인용 횟수 감소
예: 1.
from sys import getrefcount
a = [1,2,3]
print(id(a))
a.remove(1)
print(id(a))
print(a)
실행 결 과 는:
43355208 43355208 [2, 3]
설명: 대상
[1,2,3]
에서 요 소 를 삭제 하고 대상 이 가리 키 는 메모리 주 소 는 변 하지 않 습 니 다.2、
from sys import getrefcount
a = [1,2,3]
b = a
print(getrefcount(b))
del a
print(getrefcount(b))
실행 결 과 는:
3 2
설명:
del
으로 어떤 인용 을 삭제 하면 대상 의 인용 횟수 가 줄어든다.4. python 메모리 의 방출
특정한 대상 의 인용 횟수 가
0
으로 변 하면 대상 이 사용 하 는 메모리 가 회수 되 고 큰 메모 리 를 사용 하 는 변수 에 대해 del
변 수 는 해당 하 는 메모리 공간 을 즉시 방출 하지 못 하 며 수 동 으로 메모 리 를 방출 해 야 합 니 다. 문 구 는 gc.collect()
입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 함수의 귀속함수는 코드의 봉인으로 다른 프로그램에 호출될 수도 있고 함수 내부에서 호출될 수도 있으며 함수 내부에서 자신을 호출하는 방식을 함수의 귀속이라고 부른다.마치 사람이 거울 앞에 서서 거울을 보는 것과 같다. 한 사람...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.