Выбор ответа Middle Производительность и память обновлено
memory_usage без deep=True
Вопрос
Почему df.memory_usage() показывает 80 МБ, а процесс занимает 2 ГБ, хотя в таблице есть строковые колонки?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Без deep=True для строк считаются указатели, а не сами строки. Для object-колонок без deep=True учитывается только массив указателей (8 байт на значение), а Python-строки в куче не считаются. memoryusage(deep=True) или info(memoryusage="deep") покажут реальную цифру.
Варианты ответа
- pandas хранит копию каждой колонки на случай отката изменений
- Остальное занимает индекс, который
memory_usageпо умолчанию не считает - Утечка памяти в pandas, которую лечит только перезапуск ядра
- Без
deep=Trueдля строк считаются указатели, а не сами строкиправильный ответ
Разбор
Для object-колонок без deep=True учитывается только массив указателей (8 байт на значение), а Python-строки в куче не считаются. memory_usage(deep=True) или info(memory_usage="deep") покажут реальную цифру. Копий каждой колонки pandas не хранит, а индекс обычно небольшой.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Производительность и память»
- Чем заменить apply(axis=1)
- Когда помогает тип category
- Цепочное присваивание в pandas 3.0
- Обнулить тестовые заказы через loc
- Скидка по категории через map
- Категории сумм через np.select
- Ужать DataFrame: category и downcast
- category теряется при concat