Почему эффективнее создавать небольшой массив и затем расширять его, а не создавать массив полностью из большого списка? - PullRequest
0 голосов
/ 29 ноября 2018

Нашел следующий код в книге, но не смог получить полное объяснение.

x = array('d', [0] * 1000000)
x = array('d', [0]) * 1000000 

Код Python в первом случае создает массив длиной 1000000, в то время как во второй части создаетсяодин размер массива и умножение размера на тот же коэффициент.Код во втором случае работает в 100 раз быстрее, чем в первом случае.

Какова точная причина разницы в скорости?Какую роль играет реализация массивов в Python?

1 Ответ

0 голосов
/ 29 ноября 2018

Python list хранит объекты Python, но объект array.array хранит необработанные типы данных C.

Первая строка требует индивидуальной обработки каждого объекта в [0] * 1000000, следуя указателям и выполняя проверку типов идинамическая диспетчеризация и подсчет ссылок и все это миллион раз для обработки каждого элемента и преобразования его данных в необработанный C-double.Все элементы одинаковы, но конструктор array этого не знает.Есть также затраты на создание и очистку списка из миллиона элементов.

Вторая строка намного проще.Python может просто memcpy содержимое массива миллион раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...