Что такое внутреннее представление строки в Python 3.x

Я использую Одиночные элементы в качестве теста интервью.

то, Когда я прошу, чтобы разработчик назвал некоторые шаблоны разработки, если все они могут назвать, является Singleton, они не наняты.

24
задан Nick Craig-Wood 3 December 2009 в 08:37
поделиться

4 ответа

НЕТ ИЗМЕНЕНИЙ во внутреннем представлении Unicode между Python 2.X и 3.X.

Это определенно НЕ UTF-16. UTF-something является байтовым ВНЕШНИМ представлением.

Каждой кодовой единице (символу, суррогату и т. Д.) Присвоен номер из диапазона (0, 2 ** 21). Это называется его «порядковым номером».

Действительно, процитированная вами документация говорит сама за себя. Большинство двоичных файлов Python используют 16-битные порядковые номера, что ограничивает вас базовой многоязычной плоскостью («BMP»). ), если вы не хотите возиться с суррогатами (удобно, если вы не можете найти свою рубашку для волос, а ваше ложе с гвоздями не заржавело). Для работы с полным репертуаром Unicode вы бы предпочли «широкую сборку» (32 бита).

Вкратце, внутреннее представление в объекте Unicode - это массив 16-разрядных целых чисел без знака или массив 32-разрядных целых чисел без знака (используя только 21 бит).

1
ответ дан 28 November 2019 в 23:30
поделиться

Это зависит: см. здесь . Это по-прежнему верно для Python 3 в том, что касается внутреннего представления.

1
ответ дан 28 November 2019 в 23:30
поделиться

Я думаю, трудно судить о разнице между UTF-16, который представляет собой всего лишь последовательность 16-битных слов, и строковым объектом Python.

И если python скомпилирован с Unicode = UCS4 вариант, это будет сравнение между строкой UTF-32 и Python.

Итак, лучше подумайте, они находятся в разных категориях, хотя вы можете преобразовывать друг друга.

0
ответ дан 28 November 2019 в 23:30
поделиться

Изучите исходный код CPython 3.1.5 в Include / unicodeobject.h :

/* --- Unicode Type ------------------------------------------------------- */

typedef struct {
    PyObject_HEAD
    Py_ssize_t length;          /* Length of raw Unicode data in buffer */
    Py_UNICODE *str;            /* Raw Unicode buffer */
    long hash;                  /* Hash value; -1 if not set */
    int state;                  /* != 0 if interned. In this case the two
                                 * references from the dictionary to this object
                                 * are *not* counted in ob_refcnt. */
    PyObject *defenc;           /* (Default) Encoded version as Python
                                   string, or NULL; this is used for
                                   implementing the buffer protocol */
} PyUnicodeObject;

Символы хранятся в виде массива Py_UNICODE . Я считаю, что на большинстве платформ Py_UNICODE равно #define d as wchar_t .

6
ответ дан 28 November 2019 в 23:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: