Формат хранения строк в Python | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Python Developer. Professional
-3%
Разработчик на Spring Framework
-5%
iOS Developer. Professional
-8%
Golang Developer. Professional
-6%
Базы данных
-12%
Agile Project Manager
-5%
Android Developer. Professional
-11%
Microservice Architecture
-5%
C++ Developer. Professional
-5%
Highload Architect
-6%
JavaScript Developer. Basic
-8%
Backend-разработчик на PHP
-9%
Разработчик IoT
-13%
PostgreSQL
-8%
Алгоритмы и структуры данных Разработчик программных роботов (RPA) на базе UiPath и PIX Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер NoSQL Супер-практикум по использованию и настройке GIT Symfony Framework iOS Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Инфраструктура
DevOps практики и инструменты
-12%
Базы данных
-12%
Network engineer. Basic
-10%
Network engineer
-4%
Экcпресс-курс «ELK»
-10%
Инфраструктурная платформа на основе Kubernetes
-6%
Administrator Linux.Basic
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Дизайн сетей ЦОД
-13%
PostgreSQL
-8%
Разработчик программных роботов (RPA) на базе UiPath и PIX Reverse-Engineering. Professional Внедрение и работа в DevSecOps Administrator Linux. Advanced Infrastructure as a code in Ansible Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Экспресс-курс «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Формат хранения строк в Python

Python_Deep_11.07_site-5020-d4075d.png

Язык программирования Python, появившийся в 1991 году, не мог предсказать будущее и выбрал, оказавшийся не самым лучшим впоследствии, но разумный на тот момент, вариант дефолтной кодировки ASCII. С тех пор много воды утекло. Во-первых, Unicode завоевал мир, во-вторых Python в 3-й версии перешёл на Unicode'ные строки.

Но проблема заключается в том, что на уровне интерпретатора нужно всё равно оперировать байтовыми строками. Самая популярная кодировка UTF-8 является "variable width character encoding", т. е. один символ занимает от 1 до 4 байт (это закодировано в первых битах). Это не подходит для языка, где существует индексация в строке за константное время: str[5].

Внутри для представления строки используется один из трёх вариантов: — 1 байт на символ (Latin-1); — 2 байта (UCS-2); — 4 байта (UCS-4).

То есть даже если в строке все символы помещаются в один байт, но к ней прибавить emoji, то занимаемая память вырастет в 4 раза. К этому стоит добавить и то, что каждая строка на хранение своих метаданных (PyObject с доп. полями, PyTypeObject) расходует 49-80 байт. Есть и микрооптимизации: interning односимвольных строк и строковых констант в программе подразумевает превращение этих объектов в своеобразные singleton'ы.

Почему всё это важно?

Дело в том, что Python испытывает сильный рост популярности, особенно в связи со своим Data Science приложением.

growth_major_languages_1_1024x878-20219-c0eda1.png

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

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

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться