Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 9, 2008 13:06:19

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Освобождение листов и словарей

Доброго времени суток.

А как оно быстрее будет?

вот например у меня есть лист
будет ли быстрее его хлопнуть так

del myList
или же очистить так:

del myList[:]
То же самое со словарями

del myDict или myDict.clear()



Отредактировано (Окт. 9, 2008 13:06:45)

Офлайн

#2 Окт. 9, 2008 13:34:05

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Освобождение листов и словарей

Не знаю что будет быстрей, но в любом случае это не одно и то же. Во втором варианте переменная остается в пространстве имен



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Окт. 9, 2008 13:42:49

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Освобождение листов и словарей

то різні речі: очистити і видалити;
швидкість впевнений плюс/мінус така сама.
Для списку (a - ListObject):
очистка:

....
PyObject **item = a->ob_item;
i = a->ob_size;
a->ob_size = 0;
a->ob_item = NULL;
a->allocated = 0;
while (--i >= 0) {
Py_XDECREF(item[i]);
}
PyMem_FREE(item);
...
видалення:
....
i = op->ob_size;
while (--i >= 0) {
Py_XDECREF(op->ob_item[i]);
}
PyMem_FREE(op->ob_item);
....
Для словника приблизно так само. Весь час так чи інакше витрачається на те щоб пройтись по всіх елементах і зменшити їм лічильник посилань; Якщо потрібно в циклі робити щось таке:
while 1:
a = {}
....
a.clear()
то краще clear. Словники і списки після знищення - насправді не вивільняються з памяті. Вони залишаються на той випадок якщо буде потрібне створення нового словника чи списку.



Отредактировано (Окт. 9, 2008 14:03:43)

Офлайн

#4 Окт. 9, 2008 14:18:37

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Освобождение листов и словарей

ice
будет ли быстрее его хлопнуть так
Вначале надо определиться чего вы хотите добиться.



Офлайн

#5 Окт. 9, 2008 17:45:29

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Освобождение листов и словарей

Пишу под симбиан.
Есть одна операция, где работа идет с большим списком, этот список периодически приходятся обновлять с нуля

добиться хочу максимальной скорости в удалении/наполнении, а то симбиан сам по себе не такой уж расторопный

crchemist спасибо, я так и подумал :) но были сомнения по поводу листа и его



Отредактировано (Окт. 9, 2008 17:46:00)

Офлайн

#6 Окт. 10, 2008 16:30:16

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Освобождение листов и словарей

ice
но были сомнения по поводу листа и его
дивись в Python/Objects/listobject.c на методи __getslice__ and __setslice__ . Коли в __setslice__ замість value передається NULL - це означає то саме що і __delsice__



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version