Уведомления

Группа в Telegram: @pythonsu

#1 Май 13, 2010 22:16:31

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

append глюк или фича?

q = range(5)
# в словарике будут на один ключ списки строк
d = dict(zip(q, [[]]*len(q)))
d
# {0: [], 1: [], 2: [], 3: [], 4: []}
# а теперь внимание
d0 = d[0]
d0.append('a')
d
# {0: ['a'], 1: ['a'], 2: ['a'], 3: ['a'], 4: ['a']}
Я новичёк, изучаю третий день, скажите это глюк или фича? Если фича то как её пользоваться, а если глюк - то я пожалуй пойду поблюю этим говном зелёным.



Офлайн

#2 Май 13, 2010 22:48:44

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

append глюк или фича?

Это не глюк и не фитча, а просто непонимание принципов ООП.

>>> l = []
>>> ll = [l, l]
>>> ll
[[], []]
>>> l.append(1)
>>> l
[[1], [1]]
P.S. Код заполнения словаря взрывает мозг. Читай import this.



Офлайн

#3 Май 13, 2010 23:00:14

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

append глюк или фича?

Ближе к сути плс.

ZZZ
Это не глюк и не фитча, а просто непонимание принципов ООП.
Как это не глюк и не фича, т.е. вообще “ни рыба ни мясо”? И при чём здесь ООП?
ZZZ
P.S. Код заполнения словаря взрывает мозг.
Ладно не отвлекаясь от темы, мне не надо весь словарь заполнять, мне надо поэлементно как
d[0] = d[0]+['a']
но я просто становлюсь помешанным когда речь идёт об оптимизации кода, и дважды по индексу я не хочу обращаться, НО возвращась к утверждению что это всё ж глюк: после единоразового обращения по индексу append начинает работать.



Офлайн

#4 Май 14, 2010 00:02:17

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

append глюк или фича?

alexx11
НО возвращась к утверждению что это всё ж глюк: после единоразового обращения по индексу append начинает работать.
Странный Вы какой-то. Питоном пользуются тысячи людей, вы, найдя какое-то непонятно для Вас поведение в базовой по сути фиче, пытаетесь себя убедить что это баг, и что никто до этого не наступал на него?
>>> l = []
>>> id(l)
3084811852L
>>> d = {1: l, 2: l}
>>> d
{1: [], 2: []}
>>> id(d[1]), id(d[2])
(3084811852L, 3084811852L)
>>> d[1].append('a')
>>> d
{1: ['a'], 2: ['a']}
>>>
Говоря проще, все значения в дикте у Вас – это ссылки один и тот же объект.
alexx11
о я просто становлюсь помешанным когда речь идёт об оптимизации кода
Зря.

Возможно Вам нужен defaultdict.



Офлайн

#5 Май 14, 2010 00:12:11

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

append глюк или фича?

Daevaorn
Говоря проще, все значения в дикте у Вас – это ссылки один и тот же объект.
Они и видно.
Насчёт глюка, вопрос снят, а основной вопрос из этой ветки переформулирован в соседней
http://python.su/forum/viewtopic.php?id=7447



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version