Различные способы очистки списков - PullRequest
193 голосов
/ 12 мая 2009

Есть ли причина делать что-то более сложное, чем одна из этих двух строк, если вы хотите очистить список в Python?

old_list = []
old_list = list()

Причина, по которой я спрашиваю, заключается в том, что я только что увидел это в каком-то работающем коде:

del old_list[ 0:len(old_list) ]

Ответы [ 8 ]

342 голосов
/ 12 мая 2009

Очистка списка на месте повлияет на все остальные ссылки в этом же списке.

Например, этот метод не влияет на другие ссылки:

>>> a = [1, 2, 3]
>>> b = a
>>> a = []
>>> print(a)
[]
>>> print(b)
[1, 2, 3]

Но этот делает:

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]      # equivalent to   del a[0:len(a)]
>>> print(a)
[]
>>> print(b)
[]
>>> a is b
True

Вы также можете сделать:

>>> a[:] = []
35 голосов
/ 19 октября 2012

Существует очень простой способ очистить список Python. Используйте del list_name [:] .

Например:

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]
>>> print a, b
[] []
14 голосов
/ 04 июня 2017

Выполнение alist = [] не очищает список, просто создает пустой список и привязывает его к переменной alist. Старый список все еще будет существовать, если бы у него были другие привязки переменных.

Чтобы действительно очистить список на месте , вы можете использовать любой из этих способов:

  1. alist.clear() # Python 3.3+, most obvious
  2. del alist[:]
  3. alist[:] = []
  4. alist *= 0 # fastest

Подробнее см. На странице документации Типы изменяемых последовательностей .

13 голосов
/ 12 мая 2009

Мне кажется, что del вернет вам память, а назначение нового списка приведет к удалению старого только тогда, когда gc runs.matter. Это может быть полезно для больших списков, но для небольшого списка оно должно быть незначительным.

Редактировать : Как Алгориас, это не имеет значения.

Обратите внимание, что

del old_list[ 0:len(old_list) ]

эквивалентно

del old_list[:]
5 голосов
/ 12 мая 2009

В двух случаях вам может потребоваться очистить список:

  1. Вы хотите использовать имя old_list далее в своем коде;
  2. Вы хотите, чтобы старый список собирался как можно быстрее, чтобы освободить память;

В случае 1 вы просто продолжаете задание:

    old_list = []    # or whatever you want it to be equal to

В случае 2 оператор del уменьшит счетчик ссылок до объекта списка, на который указывает имя old list. Если объект списка указывается только именем old_list at, счетчик ссылок будет равен 0, и объект будет освобожден для сборки мусора.

    del old_list
4 голосов
/ 25 мая 2015
del list[:] 

Удалит значения этой переменной списка

del list

Удалит саму переменную из памяти

3 голосов
/ 07 июля 2015

Если вы очищаете список, вам, очевидно, он больше не нужен. Если это так, вы можете просто удалить весь список простым методом del.

a = [1, 3, 5, 6]
del a # This will entirely delete a(the list).

Но в случае, если вам это понадобится снова, вы можете переинициализировать его. Или просто очистите его элементы

del a[:]
0 голосов
/ 01 февраля 2016

другое решение, которое отлично работает, - это создание пустого списка в качестве справочного пустого списка.

empt_list = []

например, у вас есть список как a_list = [1,2,3]. Чтобы очистить его, просто сделайте следующее:

a_list = list(empt_list)

это сделает a_list пустым списком, как и empt_list.

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