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

Курсы

Программирование
iOS Developer. Basic
-23%
Python Developer. Professional
-13%
Golang Developer. Professional
-17%
Python Developer. Basic
-16%
iOS Developer. Professional
-13%
C# ASP.NET Core разработчик
-18%
Unity Game Developer. Professional
-11%
React.js Developer
-12%
Android Developer. Professional
-7%
Software Architect
-12%
C++ Developer. Professional
-8%
Разработчик C#
-8%
Backend-разработчик на PHP
-8%
Архитектура и шаблоны проектирования
-12%
Программист С Разработчик на Spring Framework MS SQL Server Developer AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер-практикум по использованию и настройке GIT IoT-разработчик Advanced Fullstack JavaScript developer Супер-интенсив Azure
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-17%
DevOps практики и инструменты
-18%
Архитектор сетей
-21%
Инфраструктурная платформа на основе Kubernetes
-22%
Супер-интенсив «IaC Ansible»
-16%
Супер-интенсив по управлению миграциями (DBVC)
-16%
Administrator Linux. Professional
-5%
Administrator Linux.Basic
-10%
Супер-интенсив «ELK»
-10%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах»
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться