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

Курсы

Программирование
Backend-разработчик на PHP Алгоритмы и структуры данных Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework Unity Game Developer. Basic JavaScript Developer. Professional Android Developer. Basic JavaScript Developer. Basic Java Developer. Professional Highload Architect Reverse-Engineering. Professional Java Developer. Basic Web-разработчик на Python Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Administrator Linux. Professional Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Microservice Architecture Highload Architect MS SQL Server Developer Разработчик программных роботов (RPA) на базе UiPath и PIX Разработчик голосовых ассистентов и чат-ботов Administrator Linux. Advanced Infrastructure as a code Супер-практикум по использованию и настройке GIT Administrator Linux.Basic Экспресс-курс «IaC Ansible» Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Основы Windows Server
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться