Найти - Пользователи
Полная версия: append глюк или фича?
Начало » Python для новичков » append глюк или фича?
1
alexx11
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']}
Я новичёк, изучаю третий день, скажите это глюк или фича? Если фича то как её пользоваться, а если глюк - то я пожалуй пойду поблюю этим говном зелёным.
ZZZ
Это не глюк и не фитча, а просто непонимание принципов ООП.

>>> l = []
>>> ll = [l, l]
>>> ll
[[], []]
>>> l.append(1)
>>> l
[[1], [1]]
P.S. Код заполнения словаря взрывает мозг. Читай import this.
alexx11
Ближе к сути плс.
ZZZ
Это не глюк и не фитча, а просто непонимание принципов ООП.
Как это не глюк и не фича, т.е. вообще “ни рыба ни мясо”? И при чём здесь ООП?
ZZZ
P.S. Код заполнения словаря взрывает мозг.
Ладно не отвлекаясь от темы, мне не надо весь словарь заполнять, мне надо поэлементно как
d[0] = d[0]+['a']
но я просто становлюсь помешанным когда речь идёт об оптимизации кода, и дважды по индексу я не хочу обращаться, НО возвращась к утверждению что это всё ж глюк: после единоразового обращения по индексу 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.
alexx11
Daevaorn
Говоря проще, все значения в дикте у Вас – это ссылки один и тот же объект.
Они и видно.
Насчёт глюка, вопрос снят, а основной вопрос из этой ветки переформулирован в соседней
http://python.su/forum/viewtopic.php?id=7447
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