>백엔드 개발 >파이썬 튜토리얼 >Python이 지원하지 않는 데이터 유형은 무엇입니까?

Python이 지원하지 않는 데이터 유형은 무엇입니까?

(*-*)浩
(*-*)浩원래의
2019-06-15 15:00:5320711검색

Python에는 단일 문자나 8비트 정수를 저장하는 char 또는 byte 유형이 없습니다. 길이가 1인 문자열을 사용하여 문자 또는 8비트 정수를 나타낼 수 있습니다.

Python이 지원하지 않는 데이터 유형은 무엇입니까?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.