Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Почему при добавлении (append) списка к самому себе создается бесконечно вложенный список?

#python #список #append


Добрый день! Хотел бы понять почему функция append создает бесконечно вложенный список,
если в аргумент вписать список который вызывает эту функцию.

l=[1,2,3]
l.append(l)

    


Ответы

Ответ 1



Ответ на этот вопрос в англоязычной версии SO... In [10]: l=[1,2,3] ...: l.append(l) после l.append(l) ссылка (reference) на список l будет добавлена в конец списка, что приводит к рекурсии: In [11]: l is l[3] Out[11]: True In [12]: id(l) == id(l[3]) Out[12]: True как это сделать правильно: In [14]: l.append(l[:]) In [15]: l Out[15]: [1, 2, 3, [1, 2, 3]] если вам нужен плоский (не вложенный) список: In [17]: l.extend(l) In [18]: l Out[18]: [1, 2, 3, 1, 2, 3] l[:] - создает копию списка в памяти: In [19]: l=[1,2,3] In [20]: l[:] is l Out[20]: False In [21]: id(l[:]) Out[21]: 179393864 In [22]: id(l) Out[22]: 197356744

Комментариев нет:

Отправить комментарий