Найти - Пользователи
Полная версия: Освобождение листов и словарей
Начало » Python для новичков » Освобождение листов и словарей
1
ice
Доброго времени суток.

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

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

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

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

del myDict или myDict.clear()
PooH
Не знаю что будет быстрей, но в любом случае это не одно и то же. Во втором варианте переменная остается в пространстве имен
crchemist
то різні речі: очистити і видалити;
швидкість впевнений плюс/мінус така сама.
Для списку (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. Словники і списки після знищення - насправді не вивільняються з памяті. Вони залишаються на той випадок якщо буде потрібне створення нового словника чи списку.
Александр Кошелев
ice
будет ли быстрее его хлопнуть так
Вначале надо определиться чего вы хотите добиться.
ice
Пишу под симбиан.
Есть одна операция, где работа идет с большим списком, этот список периодически приходятся обновлять с нуля

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

crchemist спасибо, я так и подумал :) но были сомнения по поводу листа и его
crchemist
ice
но были сомнения по поводу листа и его
дивись в Python/Objects/listobject.c на методи __getslice__ and __setslice__ . Коли в __setslice__ замість value передається NULL - це означає то саме що і __delsice__
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB