Выбор ответа Middle Производительность и память обновлено

memory_usage без deep=True

Вопрос

Почему df.memory_usage() показывает 80 МБ, а процесс занимает 2 ГБ, хотя в таблице есть строковые колонки?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Без deep=True для строк считаются указатели, а не сами строки. Для object-колонок без deep=True учитывается только массив указателей (8 байт на значение), а Python-строки в куче не считаются. memoryusage(deep=True) или info(memoryusage="deep") покажут реальную цифру.

Варианты ответа

  1. pandas хранит копию каждой колонки на случай отката изменений
  2. Остальное занимает индекс, который memory_usage по умолчанию не считает
  3. Утечка памяти в pandas, которую лечит только перезапуск ядра
  4. Без deep=True для строк считаются указатели, а не сами строкиправильный ответ

Разбор

Для object-колонок без deep=True учитывается только массив указателей (8 байт на значение), а Python-строки в куче не считаются. memory_usage(deep=True) или info(memory_usage="deep") покажут реальную цифру. Копий каждой колонки pandas не хранит, а индекс обычно небольшой.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.