Python에는 char 유형이 없으며 문자도 문자열입니다.
Python에는 왜 전용 char 데이터 유형이 없나요?
복잡한 것보다 단순한 것이 낫습니다. Python에서 문자열의 각 문자가 차지하는 공간은 8비트입니다.
>>> import sys >>> sys.getsizeof('') 37 >>> sys.getsizeof('a') 38
보시다시피 널 문자는 37바이트를 차지하고, 길이가 1인 문자열 'a'는 38바이트를 차지합니다. memory.byte. 문자 a가 하나 더 있으면 바이트가 하나 더 있습니다.
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;
각 문자는 ob_sval에 저장되며 나머지 36바이트를 차지합니다. 실제로 Python의 문자열 구현은 길이가 0 또는 1인 문자열, 즉 char를 저장할 수 있는 *interned라는 전역 변수를 사용하므로 공간을 절약하고 속도를 높일 수 있습니다.
/* This dictionary holds all interned strings. Note that references to strings in this dictionary are *not* counted in the string's ob_refcnt. When the interned string reaches a refcnt of 0 the string deallocation function will delete the reference from this dictionary. Another way to look at this is that to say that the actual reference count of a string is: s->ob_refcnt + (s->ob_sstate?2:0) */ static PyObject *interned;
사실 Python에는 포인터도 없고 "네이키드 데이터 구조"(비객체)도 없습니다. 심지어 가장 간단한 정수 정수도 이런 방식으로 구현됩니다.
typedef struct { PyObject_HEAD long ob_ival; } PyIntObject;
간단히 말하면, 이 디자인은 Python의 "모든 것을 만족시킵니다." 사물이다'와 '모든 것은 최대한 단순하다'는 디자인 철학을 가지고 있다.
관련 튜토리얼 권장사항: Python 비디오 튜토리얼
위 내용은 Python에는 char 유형이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!