eoranged
01.10.2012 11:41 Pidgin
a = [[]] * 5
a[2].append(1)
a[4].append(13)
Угадайте какой будет результат и почему.
Желательно засовывать этот код в интерпретатор уже после того, как ответите на вопрос :)
Он скопирует ссылку на пустой список пять раз, а потом зааппендит в него два числа?
Да.
Где мой приз?
113?
Не-не, 113 в 5-й степени и разделить на PI
Наркотики принял?
Не правильно? Тогда умножить.
[[1, 13], [1, 13], [1, 13], [1, 13], [1, 13]]
Согласен, что даже в таком простом примере всё запутано. Хер поймёшь, что за синтаксис, копируются ли ссылки или создаются новые объекты(хотя бывалому говноеду должно быть очевидно), да и вообще...
СТОЙ, ТЫ ДЕЛАЕШЬ ВСЁ НЕ ПИТОНИЧНО!
ПРАВИЛЬНО БУДЕТ СДЕЛАТЬ ЧЕРЕЗ ЛИСТ КОМПРИХЕНШН!
а вообще не надо просто пытаться изменить содержимое контейнера через методы содержимого объекта
Я сразу переделал через list comprehention, но первые несколько минут было ВНЕЗАПНО.
> а вообще не надо просто пытаться изменить содержимое контейнера через методы содержимого объекта
а как тогда? Если создавать новые объекты, то питон превратится в яву и будет не только тормозить, но и жрать память.
присваиванием по индексу внешнего контейнера :cf:
Вот я и говорю: будет ЖАВА.
а чего ты хочешь? Явного какого-то разделения действия с объектом или с ссылкой?
Сосните. Java няшная.
Всё просто: хочу, чтобы лишняя память не жралась, COW и все дела.
она не может быть няшной, она general-purpose
тогда cpython не для твоей задачи
PyPy?
да что угодно, я откуда знаю, что именно лучше в
Ну и не пизди тогда, что не подходит.
да у тебя же бахтияр!