python Список изменяется хотя с ним не производится операций
У меня есть рекурсивная функция, вот маленький кусочек из её работы:
k = list(visited[:].copy())
if count == 2:
for i in visited:
print(i)
print(id(visited),5)
print(id(k),6)
rec(id_,x-1,y,count+1,k, path.copy(), wallsV, wallsH,w,h)
if count == 2:
print(id(visited),7)
for i in visited:
print(i)
Создаётся копия массива visited в переменную k, далее k передаётся в следущую итерацию рекурсии
В подтверждение того что это новый список а не ссылка выводятся id списков, в выводах с пометками 5 и 7 они одинаковые, а с пометкой 6 другой id
И всё бы хорошо но visited по итогу изменяется, что видно на выводе:
[False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False]
[False, False, True, True, True, False, False, False, False]
[False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False]
2030876399296 5
2030876399680 6
2030876399296 7
[True, True, True, True, True, True, True, True, True]
[True, True, True, True, True, True, True, True, True]
[True, True, True, True, True, True, True, True, True]
[True, True, True, True, True, True, True, True, True]
[True, True, True, True, True, True, True, True, True]
[True, True, True, True, True, True, True, True, True]
[True, True, True, True, True, True, True, True, True]
[True, True, True, True, True, True, True, True, True]
[True, True, True, True, True, True, True, True, True]
visited изменяется хотя с ним вообще не происходит никаких действий! Объясните пожалуйста почему так. Я проверил на нескольких версиях питона и на онлайн интерпретаторе, результат одинаковый
Ответы (1 шт):
Ответ автора вопроса (перенесен): "проблема оказалась в том что ссылку на основной список я убрал, а вложенные списки так и остались слинкованы. Нужно было использовать copy.deepcopy".