python 에서 sys.getsize of 의 용법 설명
오늘 은 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
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.