@Anachoret356

Как понять, что список интернированных объектов занимает меньше памяти, чем аналогичный, но не интернированных?

import sys


text = 'ППППППППП'

lst_text = [item for item in text]
lst_intern_text = [sys.intern(item) for item in text]

print(lst_text[0] is lst_text[-1],  lst_text[0] == lst_text[-1])
print(lst_intern_text[0] is lst_intern_text[-1],  lst_intern_text[0] == lst_intern_text[-1])
# В списке lst_text все элементы ссылаются на разные объекты в памяти, в списке lst_intern_text на один.

Как проверить, что два списка используют разный объем памяти(и так ли это вообще?), если sys.getsizeof и метод __sizeof__() для обоих списков показывают одинаковое значение?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
если sys.getsizeof и метод __sizeof__() для обоих списков показывают одинаковое значение

Читай документацию!
Only the memory consumption directly attributed to the object is accounted for, not the memory consumption of objects it refers to.

Два списка одного размера занимают одинаковый объём памяти, а вот их элементы в этот объём не входят, их надо считать отдельно. Там-то и будет засада.

Интернированные объекты - это своего рода синглтоны, они существуют в единственном экземпляре, и при создании через литерал вместо создания нового объекта переиспользуется старый. Разумеется, это подразумевает, что объект неизменяемый.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы