Python 인용 계수 조작 예제

2394 단어 Python인용 계수
이 글 의 실례 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기