List: В чем разница между операциями append и + в цикле?

a = [[1, 2], [3, 4]]

for row in a:
    row += [7]

print(a)

на выходе: [[1, 2, 7], [3, 4, 7]]

а если так:

a = [[1, 2], [3, 4]]

for row in a:
    row = row + [7]

print(a)

то выводит [[1, 2], [3, 4]]

в чем разница между операциями в цикле?


Ответы (1 шт):

Автор решения: CrazyElf

Ну вы в общем-то уже всё правильно поняли.

Дело в том, что итератор row это ссылка (указатель) на элемент списка.

row += [7] работает так же, как row.append(7), то есть добавляет элемент в готовый список, ссылка на который содержится в переменной row.

row = row + [7] создаёт новый список из элементов списка row и добавляемого списка и уже после этого присваивает ссылку на этот новый список в переменную цикла row. Таким образом, тот список, на который переменная row указывала в начале цикла, никак не меняется. Что мы и наблюдаем при печати значений.

→ Ссылка