Оператор конкатенации +- это бинарный инфиксный оператор, который при применении к спискам возвращает новый список, содержащий все элементы каждого из двух его операндов. list.append()Метод является mutatorна listкоторый присоединяет свой единственный objectаргумент (в вашем конкретном примере списка c) к предмету list. В вашем примере это приводит к cдобавлению ссылки на себя (отсюда и бесконечная рекурсия).
Альтернатива конкатенации '+'
Этот list.extend()метод также является методом мутатора, который объединяет свой sequenceаргумент с субъектом list. В частности, он добавляет каждый из элементов sequenceв порядке итерации.
В сторону
Являясь оператором, +возвращает результат выражения в виде нового значения. Поскольку это mutatorметод без цепочки , он list.extend()изменяет список тем на месте и ничего не возвращает.
Массивы
Я добавил это из-за потенциальной путаницы, которую может вызвать приведенный выше ответ Абеля, смешав обсуждение списков, последовательностей и массивов.
Arraysбыли добавлены в Python после последовательностей и списков, как более эффективный способ хранения массивов целых типов данных. Не путайте arraysс lists. Они не одинаковы.
Из документов массива :
Массивы являются последовательными типами и ведут себя очень похоже на списки, за исключением того, что тип хранимых в них объектов ограничен. Тип указывается во время создания объекта с помощью кода типа, который представляет собой один символ.