Уведомления

Группа в Telegram: присоединиться

#1 Ноя. 8, 2019 21:51:17

ynos
Зарегистрирован: 2019-11-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Сколько максимально элементов целого типа можно сохранить в списке?

Я новичок. Помогите разобраться
Следующий код выдает ошибку memory error

 x = []
for i in range(1000000000):
 x.append(i)

Сколько элементов можно сохранить в список и от чего зависит заполнение памяти?

python 3.7 x64/ubuntu 18.04/4Gb Ram

Офлайн

#2 Ноя. 8, 2019 23:04:43

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2197
Репутация: +  154  -
Профиль   Отправить e-mail  

Сколько максимально элементов целого типа можно сохранить в списке?

> Следующий код выдает ошибку memory error … Сколько элементов можно сохранить в список и от чего зависит заполнение памяти?

Я для прикола запустил у себя этот код, он отработал нормально и сожрал почти 40 ГиБ памяти. Выводы делай сам…



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Ноя. 8, 2019 23:05:05)

Офлайн

#3 Ноя. 8, 2019 23:37:20

ynos
Зарегистрирован: 2019-11-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Сколько максимально элементов целого типа можно сохранить в списке?

Rodegast
> Следующий код выдает ошибку memory error … Сколько элементов можно сохранить в список и от чего зависит заполнение памяти?Я для прикола запустил у себя этот код, он отработал нормально и сожрал почти 40 ГиБ памяти. Выводы делай сам…
У Вас 64гб RAM?

Офлайн

#4 Ноя. 8, 2019 23:50:45

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 1472
Репутация: +  207  -
Профиль   Отправить e-mail  

Сколько максимально элементов целого типа можно сохранить в списке?

ynos
Сколько элементов можно сохранить в список и от чего зависит заполнение памяти?
Заполнение памяти зависит, как ни странно, от того чем вы ее заполняете. Для списка из n элементов нужно n * <размер элемента> байтов. Для разных ОС, разных архитектур с разным количеством RAM и разных данных колличество элементов будет отличаться.(возможно даже что эта цифра будет разной для разных версий пайтона), и все упираеться в то сколько памяти сможет скушать ваш пайтон.
на моем компе в вашем варианте цикл останавливаеться на 67090194-м элементе, а если поменять код на
 x = [0]
for i in range(1000000000):
     x.append(x[0])
то цикл прерветься на 138753635 -м элементе(потому кака ссылка на элемент занимает меньше места)
И в том и в другом случае это произошло когда программа заняла порядка 1.3 гига памяти, но пайтон 32-х битный да и версии 3.2
Поставив версию 3.7x32 тот же код выдал MemoryError на
75476475-м и 175610084-м элементе при использовании памяти в 1.5 гига и 700 Мб соответствено.
как видно от версии к версии пайтона эти показатели также могут меняться.

Чтобы сказать точнее нужно копаться в сырцах пайтона… по идее оно должно быть завязано на константу PY_SSIZE_T_MAX
 if (new_allocated > (size_t)PY_SSIZE_T_MAX / sizeof(PyObject *)) {
PyErr_NoMemory();
https://github.com/python/cpython/blob/master/Objects/listobject.c
тоесть зависеть от операционки, ее разрядности, версии и разрядности пайтона и количества РАМы, но точную математику сейчас не приведу.

Отредактировано PEHDOM (Ноя. 8, 2019 23:53:48)

Офлайн

#5 Ноя. 9, 2019 11:47:40

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2197
Репутация: +  154  -
Профиль   Отправить e-mail  

Сколько максимально элементов целого типа можно сохранить в списке?

> У Вас 64гб RAM?

Да.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Ноя. 9, 2019 11:55:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version