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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
20 - Ansible 상용 모듈 - yum 모듈즉, 인증 패 키 지 를 사용 하지 않 고 직접 설치 합 니 다.대응 하 는 yum 소스 가 gpg 인증 을 열지 않 은 경우 이 매개 변수의 값 을 yes 로 설정 해 야 합 니 다. enablerepo 인자: 패...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.