Python에는 단일 문자나 8비트 정수를 저장하는 char 또는 byte 유형이 없습니다. 길이가 1인 문자열을 사용하여 문자 또는 8비트 정수를 나타낼 수 있습니다.
Python에서는 문자열의 각 문자가 차지하는 공간이 비트입니다. (권장 학습: Python 동영상 튜토리얼)
>>> import sys >>> sys.getsizeof('') 37 >>> sys.getsizeof('a') 38
널 문자가 37바이트를 차지하고 문자의 길이는 1 문자열 'a'는 38바이트의 메모리를 차지합니다. a 문자가 하나 더 있으면 1바이트가 더 생깁니다.
Python에서는 문자열이 다음과 같이 구현됩니다.
typedef struct { PyObject_VAR_HEAD long ob_shash; int ob_sstate; char ob_sval[1]; /* Invariants: * ob_sval contains space for 'ob_size+1' elements. * ob_sval[ob_size] == 0. * ob_shash is the hash of the string or -1 if not computed yet. * ob_sstate != 0 iff the string object is in stringobject.c's * 'interned' dictionary; in this case the two references * from 'interned' to this object are *not counted* in ob_refcnt. */ } PyStringObject;
각 문자는 8비트 크기를 차지합니다. 남은 36바이트는 주로 PyObject_VAR_HEAD 매크로에서 나옵니다. 실제로 Python의 문자열 구현은 *interned라는 전역 변수도 사용합니다. 이 변수는 길이가 0 또는 1인 문자열, 즉 char를 저장할 수 있어 공간을 절약하고 속도를 높일 수 있습니다. .
사실 Python에는 포인터나 "네이키드 데이터 구조"(비객체)가 없습니다. 심지어 가장 간단한 정수 정수도 이런 방식으로 구현됩니다.
typedef struct { PyObject_HEAD long ob_ival; } PyIntObject;
간단히 말하면, 이 디자인은 Python의 "모든 것이 옳다"를 만족합니다. ♂Xiang♂", "모든 것은 최대한 단순해야 한다"는 디자인 철학입니다.
더 많은 Python 관련 기술 기사를 보려면 Python Tutorial 칼럼을 방문하여 배워보세요!
위 내용은 Python이 지원하지 않는 데이터 유형은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!