Различные способы очистки списков

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

old_list = []
old_list = list()

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

del old_list[ 0:len(old_list) ]

Ответ 1

Удаление списка на месте повлияет на все другие ссылки того же списка.

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

>>> 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[:] = []

Ответ 2

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

Например:

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]
>>> print a, b
[] []

Ответ 3

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

Это может быть полезно для больших списков, но для небольшого списка оно должно быть незначительным.

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

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

del old_list[ 0:len(old_list) ]

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

del old_list[:]

Ответ 4

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

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

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

Смотрите страницу документации Mutable Sequence Types для более подробной информации.

Ответ 5

Есть два случая, когда вы можете удалить список:

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

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

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

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

    del old_list

Ответ 6

del list[:] 

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

del list

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

Ответ 7

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

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

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

del a[:]

Ответ 8

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

empt_list = []

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

a_list = list(empt_list)

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