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