HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: python, data science, программирование на python, разработка на python, строки, кодировка в python</p>
1 <p>Теги: python, data science, программирование на python, разработка на python, строки, кодировка в python</p>
2 <p>Язык программирования<strong>Python</strong>, появившийся в 1991 году, не мог предсказать будущее и выбрал, оказавшийся не самым лучшим впоследствии, но разумный на тот момент, вариант дефолтной кодировки<strong>ASCII</strong>. С тех пор много воды утекло. Во-первых,<strong>Unicode</strong>завоевал мир, во-вторых Python в 3-й версии перешёл на Unicode'ные строки.</p>
2 <p>Язык программирования<strong>Python</strong>, появившийся в 1991 году, не мог предсказать будущее и выбрал, оказавшийся не самым лучшим впоследствии, но разумный на тот момент, вариант дефолтной кодировки<strong>ASCII</strong>. С тех пор много воды утекло. Во-первых,<strong>Unicode</strong>завоевал мир, во-вторых Python в 3-й версии перешёл на Unicode'ные строки.</p>
3 <p>Но проблема заключается в том, что на уровне интерпретатора нужно всё равно оперировать байтовыми строками. Самая популярная кодировка UTF-8 является "<strong>variable width character encoding</strong>", т. е. один символ занимает от 1 до 4 байт (это закодировано в первых битах). Это не подходит для языка, где существует индексация в строке за константное время: str[5].</p>
3 <p>Но проблема заключается в том, что на уровне интерпретатора нужно всё равно оперировать байтовыми строками. Самая популярная кодировка UTF-8 является "<strong>variable width character encoding</strong>", т. е. один символ занимает от 1 до 4 байт (это закодировано в первых битах). Это не подходит для языка, где существует индексация в строке за константное время: str[5].</p>
4 <p>Внутри для представления строки используется один из трёх вариантов: - 1 байт на символ (Latin-1); - 2 байта (UCS-2); - 4 байта (UCS-4).</p>
4 <p>Внутри для представления строки используется один из трёх вариантов: - 1 байт на символ (Latin-1); - 2 байта (UCS-2); - 4 байта (UCS-4).</p>
5 <p>То есть даже если в строке все символы помещаются в один байт, но к ней прибавить<strong>emoji</strong>, то занимаемая память вырастет в 4 раза. К этому стоит добавить и то, что каждая строка на хранение своих метаданных (PyObject с доп. полями, PyTypeObject) расходует 49-80 байт. Есть и микрооптимизации: interning односимвольных строк и строковых констант в программе подразумевает превращение этих объектов в своеобразные<strong>singleton'ы</strong>.</p>
5 <p>То есть даже если в строке все символы помещаются в один байт, но к ней прибавить<strong>emoji</strong>, то занимаемая память вырастет в 4 раза. К этому стоит добавить и то, что каждая строка на хранение своих метаданных (PyObject с доп. полями, PyTypeObject) расходует 49-80 байт. Есть и микрооптимизации: interning односимвольных строк и строковых констант в программе подразумевает превращение этих объектов в своеобразные<strong>singleton'ы</strong>.</p>
6 <h2>Почему всё это важно?</h2>
6 <h2>Почему всё это важно?</h2>
7 <p>Дело в том, что Python испытывает сильный рост<a>популярности</a>, особенно в связи со своим Data Science<a>приложением</a>.</p>
7 <p>Дело в том, что Python испытывает сильный рост<a>популярности</a>, особенно в связи со своим Data Science<a>приложением</a>.</p>
8 <p>Как известно, одним из основных направлений является анализ текстов на естественных языках NLP. А он, в свою очередь, подразумевает обработку больших текстовых массивов. Именно поэтому стоит отметить, что<strong>формат хранения строк может иметь критическое значение</strong>в некоторых кейсах.</p>
8 <p>Как известно, одним из основных направлений является анализ текстов на естественных языках NLP. А он, в свою очередь, подразумевает обработку больших текстовых массивов. Именно поэтому стоит отметить, что<strong>формат хранения строк может иметь критическое значение</strong>в некоторых кейсах.</p>
9 <p><em>Если нужны подробности, смотрите<a>здесь</a>и<a>здесь</a>. И не забывайте высказывать своё мнение в комментариях!</em></p>
9 <p><em>Если нужны подробности, смотрите<a>здесь</a>и<a>здесь</a>. И не забывайте высказывать своё мнение в комментариях!</em></p>
10  
10