Найти - Пользователи
Полная версия: Правильное удаление списков
Начало » Python для новичков » Правильное удаление списков
1 2
alexeyvanzhula
Обясните пожалуйста в чом разница
Есть большой список (list) из елементов. Я всегда его очищал так -
List = []
Но с недавних пор в нете увидел что удаляют так -
List[:] = []
Не могу вехать в чем разница. По расходу памяти проверял - вроди разнецы нет…
fata1ex
alexeyvanzhula
Обясните пожалуйста в чом разница
Есть большой список (list) из елементов. Я всегда его очищал так - List =
Но с недавних пор в нете увидел что удаляют так - List =
Не могу вехать в чем разница. По расходу памяти проверял - вроди разнецы нет…

Я пока тоже разницы не усмотрел.
Ed
Форум сожрал то, что было в квадратных скобках. Используйте тег code и будет вам счастье.
FishHook
a=5
l1=[a]*5
l2=l1
l1[:]=[]
print l2
  
###
  
a=5
l1=[a]*5
l2=l1
l1=[]
print l2

[]
[5, 5, 5, 5, 5]
alexeyvanzhula
то есть обычные переменные например int, при присваивании знаком ‘=’ работают как ссылка - a=b
а список -
l2=l1
- как копия? Тогда зачем писать
l2=l1[:]
- если мы хотим копию списка, а не ссылку на него?
FishHook
alexeyvanzhula
то есть обычные переменные например int, при присваивании знаком ‘=’ работают как ссылка - a=b
а список -
l2=l1
- как копия? Тогда зачем писать
l2=l1[:]
- если мы хотим копию списка, а не ссылку на него?

l=[1,2,3,4,5]
l2=l # ССЫЛКА
l[0]=9
print l2
l=[1,2,3,4,5]
l2=l[:] # КОПИЯ
l[0]=9
print l2
[9, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
alexeyvanzhula
FishHook
alexeyvanzhula
то есть обычные переменные например int, при присваивании знаком ‘=’ работают как ссылка - a=b
а список -
l2=l1
- как копия? Тогда зачем писать
l2=l1[:]
- если мы хотим копию списка, а не ссылку на него?

l=[1,2,3,4,5]
l2=l # ССЫЛКА
l[0]=9
print l2
l=[1,2,3,4,5]
l2=l[:] # КОПИЯ
l[0]=9
print l2
[9, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

Это я понимаю, но всеравно не улавливаю смысл строки:
l1[:]=[]

Слева судя синтаксису питона создаеться копия которой сразу же присваиваеться пустота
Обясните пожалуйста словами суть строки, или может где про это почитать

ПС Заранее извиняюсь за тупизм
FishHook
alexeyvanzhula
Слева судя синтаксису питона создаеться копия которой сразу же присваиваеться пустота
Да нет же.
Так:
l=[1,2,3,4,5]
l=[]
переменной l сначала присваивается один список, а потом другой список , то есть старое значение теряется, а новое присваивается, с одинаковым успехом новым значением мог стать список, целое, строка, кортеж, словарь, функция, да что угодно, один объект уничтожается - другой создается.
А так:
l=[1,2,3,4,5]
l[:]=[]
элементам уже существующего списка присваиваются новые значения, практически просто удаляются все элементы списка, а сама ссылка на список остается той же, т.е. новый объект не создается. То же самое бы произошло бы, например в таком случае
l=[1,2,3,4,5]
l[ 0 : 5 ]=[3,60,30,20,10]
старый список не удаляется, новый не создается.
Надеюсь понятно объяснил.
FishHook
Понятней будет если поймёте, что

List[ : ]
это просто краткая запись
List[ 0 : len(List) ]
То есть обычный срез списка, сам список никуда не девается
Показываю фокус
>>> l=[1,2,3,4,5,6,7,8,9,10]
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l[3:4]=[100,100,100,100]
>>> l
[1, 2, 3, 100, 100, 100, 100, 5, 6, 7, 8, 9, 10]
>>> 
Теперь понятно, что будет при
l[ : ]=[]
???:)
buddha
Типа потребляет меньше ресурсов?
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