python 에서 sys.getsize of 의 용법 설명

3029 단어 pythonsysgetsizeof
코 반 출신 의 코드 가축 은 하나님 의 성경 에 주입 되 어 왔 다."하나의 int 는 4 개의 바이트 를 차지 하고 하나의 char 는 1 개의 바이트 를 차지 하 며 하나의 float 는 4 개의 바이트 를 차지한다."
오늘 은 python 의 getsize of 함 수 를 보 았 습 니 다.python 의 각 기본 데이터 형식(대상)이 사용 하 는 메모리 크기 와 c+/자바 가 완전히 다 릅 니 다~
전제 개술:python 의 모든 것 이 대상 입 니 다.so python 에는 int float 라 는 유형 이 존재 하지 않 습 니 다.int 는 사실 python 대상 입 니 다.
int:28float:24string:54list():64{}:288ste():224

그리고
(1)sys.getsize of 는 실제 사용 하 는 메모리 크기 만 계산 하고 소 모 된 메모리 크기 를 참조 하여 계산 하지 않 습 니 다.
(2)sys.getsize of 는 메모리 크기 를 계산 하 는 참고 로 만 사용 할 수 있 습 니 다~
질문 이 있 습 니 다.왜 python 의 각 데이터 형식 점용 크기 는 c++와 일치 하지 않 습 니까?
이 곳 은 본질 적 으로 python 의 실현 에 의 해 결 정 됩 니 다.python 코드 는 실 행 될 때 python 해상도 기 에서 실 행 됩 니 다.구체 적 으로 C 언어의 특정한 구조 로 분 석 됩 니 다.즉,python 의 int(또는 기타)가 c 언어 에 비 치 는 것 은 복잡 한 구조 체 일 수 있다.
python 의 int 를 예 로 들 면 다음은 python 의 int 가 C 에서 의 구체 적 인 형식 입 니 다.

typedef struct {
    PyObject_HEAD
    long ob_ival;
} PyIntObject;

struct _longobject {
    long ob_refcnt;  //     
    PyTypeObject *ob_type; //    
    size_t ob_size;  //        
    long ob_digit[1];  //     python 
};
발견 되 지 않 았 습 니 다.python 의 실제 값 은 해당 C 구조의 한 속성 일 뿐 입 니 다.어쩐지 python 의 int 가 28 개의 바이트 를 차지 하 더 라 고요.C 언어 는 4 개의 바이트 만 필요 합 니 다.python 은 관련 된 다른 정 보 를 많이 저장 하기 때 문 입 니 다!다른 정 보 는 실제 수치의 6 배 크기!
발견 되 지 않 았 습 니 다.python 의 실제 값 은 해당 C 구조의 한 속성 일 뿐 입 니 다.어쩐지 python 의 int 가 28 개의 바이트 를 차지 하 더 라 고요.C 언어 는 4 개의 바이트 만 필요 합 니 다.python 은 관련 된 다른 정 보 를 많이 저장 하기 때 문 입 니 다!다른 정 보 는 실제 수치의 6 배 크기!
ps:메모리 크기 를 정확하게 조절 하려 면 c++또는 자바 를 사용 하 세 요~
추가:sys.getsize of 를 사용 하여 python 대상 의 메모리 사용량 을 봅 니 다.
sys.getsize of 방법 을 사용 하면 python 대상 의 메모리 사용량 을 볼 수 있 습 니 다.단위:바이트(byte)
실제로 호출 되 었 습 니 다sizeof__ 방법:

In [35]: import sys

In [36]: sys.getsizeof('hello world')
Out[36]: 60

In [37]: 'hello world'.__sizeof__()
Out[37]: 60
어떤 데이터 형식 은 Python 3 과 Python 2 에서 사용 하 는 메모리 가 다 릅 니 다.
예 를 들 어 range:

# python3
In [38]: sys.getsizeof(range(999))
Out[38]: 48

In [39]: sys.getsizeof(iter(range(999)))
Out[39]: 48

# python2
>>> sys.getsizeof(range(999))
8064
>>> sys.getsizeof(iter(range(999)))
64
이 값 을 어떻게 계산 하 는 지 는 연구 가 필요 해~
일시 적 으로 알 수 있 습 니 다:이 값 은 이 대상 의 수치,서명(데이터 형식,파라미터,호출 방식 등 포함)등 일련의 데이터 가 전체 메모 리 를 차지 합 니 다.가 변 대상 이 차지 하 는 메모리 가 매우 작 을 수 있 습 니 다.대상 은 포인터 이기 때문에 큰 데 이 터 를 가리 키 고 있 습 니 다.

In [65]: s = sys.getsizeof

In [66]: s(1)
Out[66]: 28

In [67]: s(11)
Out[67]: 28

In [68]: s(11111111)
Out[68]: 28

In [69]: s(1111111111)
Out[69]: 32
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기