Python 인용 계수 조작 예제
메모리 관 리 를 간소화 하기 위해 Python 은 인용 계수 체 제 를 통 해 자동 쓰레기 회수 기능 을 실현 하 였 으 며,Python 의 모든 대상 은 하나의 인용 수 를 가지 고 있 으 며,이 대상 이 서로 다른 장소 에서 각각 몇 번 인용 되 었 는 지 계산 하 는 데 사용 되 었 다.파 이 썬 대상 을 한 번 인용 할 때마다 해당 인용 수 는 1 증가 하고,파 이 썬 대상 을 한 번 없 앨 때마다 해당 인용 은 1 감소 하 며,인용 계수 가 0 일 때 만 메모리 에서 파 이 썬 대상 을 삭제 합 니 다.
import ctypes
def get_ref(obj):
""" returns a c_size_t, which is the refcount of obj """
return ctypes.c_size_t.from_address(id(obj))
l = [1,2,3,4]
l2 =l
l_ref = get_ref(l)
print l_ref
del l
print l_ref
del l2
print l_ref
another_list = [0, 0, 7]
a_ref = get_ref(another_list)
print a_ref
출력:c_ulong(2L)
c_ulong(1L)
c_ulong(0L)
c_ulong(1L)
실행 결 과 는 다음 그림 과 같 습 니 다.
또한 python 에서 바이트 코드 로 컴 파일 된 모듈 은 dis 입 니 다.
import dis # bytecode disassembler module
def time_2(x):
return 2 * x
dis.dis(time_2)
print "*"*20
dis.dis(get_ref)
상기 코드 와 결합 하여 테스트 예 는 다음 과 같다.
import ctypes
import dis # bytecode disassembler module
def get_ref(obj):
""" returns a c_size_t, which is the refcount of obj """
return ctypes.c_size_t.from_address(id(obj))
def time_2(x):
return 2 * x
dis.dis(time_2)
print "*"*20
dis.dis(get_ref)
실행 결과:7 0 LOAD_CONST 1 (2)
3 LOAD_FAST 0 (x)
6 BINARY_MULTIPLY
7 RETURN_VALUE
********************
5 0 LOAD_GLOBAL 0 (ctypes)
3 LOAD_ATTR 1 (c_size_t)
6 LOAD_ATTR 2 (from_address)
9 LOAD_GLOBAL 3 (id)
12 LOAD_FAST 0 (obj)
15 CALL_FUNCTION 1
18 CALL_FUNCTION 1
21 RETURN_VALUE
Python 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.