#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
Комментариев нет:
Отправить комментарий