Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: interning, string interning, id(), is operator, memory optimization

Как работает механизм интернирования в Python?

Вопрос проверяет понимание механизма интернирования строк и целых чисел в Python, который используется для оптимизации памяти и ускорения сравнений.

Короткий ответ

Интернирование — это механизм, при котором Python кэширует определённые неизменяемые объекты (например, короткие строки и небольшие целые числа) в памяти, чтобы повторно использовать их. Это означает, что несколько переменных, ссылающихся на одинаковое значение, могут указывать на один и тот же объект в памяти. Это экономит память и ускоряет операции сравнения через 'is'. Однако не все строки интернируются автоматически — обычно это строки, которые являются идентификаторами (например, имена переменных) или короткие литералы.

Длинный ответ

Интернирование (interning) — это техника оптимизации, применяемая в Python для некоторых неизменяемых типов данных, в первую очередь для строк и целых чисел. Её цель — уменьшить потребление памяти и ускорить сравнение объектов за счёт повторного использования уже созданных экземпляров.

Как это работает

Python поддерживает пул интернированных объектов. Когда вы создаёте строку или целое число, которое подпадает под критерии интернирования, интерпретатор сначала проверяет, нет ли уже такого объекта в пуле. Если есть — возвращается ссылка на существующий объект, а новый не создаётся. Это можно проверить с помощью оператора is и функции id().

Что интернируется

  • Целые числа в определённом диапазоне (обычно от -5 до 256).
  • Строки, которые являются идентификаторами (имена переменных, функций, классов) или короткие строковые литералы. Также строки, созданные во время компиляции модуля.
  • Пустые строки и строки длиной 1, содержащие символы ASCII, почти всегда интернируются.

Пример кода

# Пример с целыми числами
a = 100
b = 100
print(a is b)  # True, потому что 100 интернируется

c = 300
d = 300
print(c is d)  # Может быть True или False в зависимости от реализации

# Пример со строками
s1 = 'hello'
s2 = 'hello'
print(s1 is s2)  # True для коротких строк

s3 = 'hello world!'
s4 = 'hello world!'
print(s3 is s4)  # Может быть False для длинных строк

# Явное интернирование строк
import sys
s5 = sys.intern('a long string that might not be interned automatically')
s6 = sys.intern('a long string that might not be interned automatically')
print(s5 is s6)  # True после явного интернирования

Где применяется

Интернирование особенно полезно в ситуациях, когда в программе много повторяющихся строковых значений, например, при обработке текста, парсинге XML/HTML (теги, атрибуты), работе с идентификаторами в базах данных или ключами в словарях. Явное интернирование через sys.intern() может значительно сократить потребление памяти в таких случаях.

Вывод: Механизм интернирования стоит применять сознательно для оптимизации памяти при работе с большим количеством повторяющихся неизменяемых значений, особенно строк-идентификаторов, где важна скорость сравнения.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#interning

#string interning

#id()

#is operator

#memory optimization

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.