Подтвердить что ты не робот

В чем разница между del a [:] и a = [], когда я хочу удалить список, называемый a в python?

Каков наиболее эффективный способ опорожнения списка?

У меня есть список под названием a = [1,2,3]. Чтобы удалить содержимое списка, я обычно пишу a = [ ]. Я наткнулся на функцию в python под названием del. Я хочу знать, есть ли разница между del a [:] и тем, что я использую.

4b9b3361

Ответ 1

Есть разница, и это связано с тем, ссылается ли этот список на несколько мест/имен.

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

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

Использование del a[:] очищает существующий список, что означает, что в любом месте, на который он ссылается, станет пустой список.

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

Ключом к пониманию здесь является осознание того, что когда вы присваиваете что-то переменной, оно просто заставляет это имя указывать на вещь. Вещи могут иметь несколько имен, и изменение имени указывает на то, что оно не меняет сама вещь.

Ответ 2

Это может быть лучше всего показано:

>>> a = [1, 2, 3]
>>> id(a)
45556280
>>> del a[:]
>>> id(a)
45556280
>>> b = [4, 5, 6]
>>> id(b)
45556680
>>> b = []
>>> id(b)
45556320

Когда вы выполняете a[:], вы ссылаетесь на все элементы в списке "назначено" на a. Оператор del удаляет ссылки на объекты. Итак, при выполнении del a[:] говорится: "Удалите все ссылки на объекты из списка, назначенного a". Сам список не изменился. Мы можем видеть это с помощью функции id, которая дает нам число, представляющее объект в памяти. Идентификатор списка перед использованием del и после этого остается неизменным, указывая тот же объект списка на a.

С другой стороны, когда мы назначаем непустой список b, а затем присваиваем новый пустой список b, идентификатор изменяется. Это связано с тем, что мы действительно переместили ссылку b из существующего списка [4, 5, 6] в новый список [].

Помимо только тождества объектов, с которыми вы имеете дело, есть и другие вещи, о которых нужно знать:

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

Оба b и a относятся к тому же списку. Удаление элементов из списка a без изменения самого списка изменяет список на месте. Поскольку b ссылается на один и тот же объект, мы видим тот же результат. Если вы сделали a = [] вместо этого, то a будет ссылаться на новый пустой список, а b продолжает ссылаться на список [1, 2, 3].

Ответ 3

>>> list1 = [1,2,3,4,5]
>>> list2 = list1

Чтобы лучше понять, давайте посмотрим с помощью фотографий, которые происходят внутри.

>>> list1 = [1,2,3,4,5]

Это создает объект списка и назначает его list1. Initialization of list1 in memory

>>> list2 = list1

Объект списка, к которому относится list1, также присваивается list2.

Теперь давайте рассмотрим методы для удаления списка и того, что на самом деле происходит внутри.

МЕТОД-1: установить в пустой список []:

>>> list1 = []
>>> list2
[1,2,3,4,5]

Set list1 to empty list

Это не удаляет элементы списка, но удаляет ссылку на список. Таким образом, list1 теперь указывает на пустой список, но все остальные ссылки будут иметь доступ к этому старому list1.
Этот метод просто создает новый объект списка и назначает его list1. Любые другие ссылки останутся.

МЕТОД-2: удаление с помощью оператора среза [:]:

>>> del list1[:]
>>> list2
[]

Delete all elements of list1 using slice operator

Когда мы используем оператор slice для удаления всех элементов списка, тогда все места, на которые он ссылается, становятся пустым. Таким образом, list2 также становится пустым.

Ответ 4

Ну, Del использует только немного меньше места в компьютере, как подразумевал человек выше меня. Компьютер все еще принимает переменную как один и тот же код, за исключением другого значения. Однако, когда переменной присваивается что-то другое, компьютер присваивает ему совершенно другой код, чтобы учесть изменение требуемой памяти.