Неправильный вывод функции python
def generatePaths():
p = [0,0,0,0,0,0,0,0]
r = []
p[-1] += 1 # Увеличиваем последний элемент массива на 1
r.append(p)# Добавляем этот массив к r
p[-1] += 1 # Увеличиваем последний элемент массива на 1
r.append(p)# Добавляем этот массив к r
return r
Вывод получается:
[[0, 0, 0, 0, 0, 0, 0, 2], [0, 0, 0, 0, 0, 0, 0, 2]]
Почему так?
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Потому что это один и тот же список p два раза лежит внутри списка r. Т.е. фактически у вас список r выглядит так:
r = [p, p]
Когда вы меняете список p, эти изменения отражаются в том, что вы видите в списке r (два раза).
Хотите, чтобы эти вложенные в r списки стали независимыми (разными) списками - делайте копию списка:
r.append(p.copy())
Хотя это поможет только с одномерными списками. Если там будет больше вложенность, то копировать нужно будет с помощью deepcopy.
Автор решения: Илья Коровин
→ Ссылка
Ссылка на список p совпадает с ссылкой на список r. Вам потребуется сделать копию списка для созданий новой ссылки на память.