Уведомления

Группа в Telegram: @pythonsu

#1 Май 14, 2012 21:33:24

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное удаление списков

Обясните пожалуйста в чом разница
Есть большой список (list) из елементов. Я всегда его очищал так -

List = []
Но с недавних пор в нете увидел что удаляют так -
List[:] = []
Не могу вехать в чем разница. По расходу памяти проверял - вроди разнецы нет…

Отредактировано alexeyvanzhula (Май 14, 2012 23:18:32)

Офлайн

#2 Май 14, 2012 22:06:30

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Правильное удаление списков

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

Я пока тоже разницы не усмотрел.



Офлайн

#3 Май 14, 2012 23:00:37

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Правильное удаление списков

Форум сожрал то, что было в квадратных скобках. Используйте тег code и будет вам счастье.



Офлайн

#4 Май 15, 2012 05:37:01

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Правильное удаление списков

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]



Отредактировано FishHook (Май 15, 2012 05:37:35)

Офлайн

#5 Май 15, 2012 07:54:33

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное удаление списков

то есть обычные переменные например int, при присваивании знаком ‘=’ работают как ссылка - a=b
а список -

l2=l1
- как копия? Тогда зачем писать
l2=l1[:]
- если мы хотим копию списка, а не ссылку на него?

Отредактировано alexeyvanzhula (Май 15, 2012 07:55:24)

Офлайн

#6 Май 15, 2012 08:05:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Правильное удаление списков

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]



Офлайн

#7 Май 15, 2012 10:50:17

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное удаление списков

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

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

ПС Заранее извиняюсь за тупизм

Отредактировано alexeyvanzhula (Май 15, 2012 10:50:47)

Офлайн

#8 Май 15, 2012 11:13:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Правильное удаление списков

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 (Май 15, 2012 11:15:04)

Офлайн

#9 Май 15, 2012 11:21:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Правильное удаление списков

Понятней будет если поймёте, что

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



Офлайн

#10 Май 15, 2012 16:06:06

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Правильное удаление списков

Типа потребляет меньше ресурсов?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version