Каждая часть сама по себе имеет смысл, объединяя все вместе, как у вас бывает, чтобы выявить несоответствия.
Кортежи определяют __add__
и допускают объединение других кортежей.Имеет смысл, вы можете добавить две вещи одного типа вместе.То же самое для списков, вы можете +
два списка вместе.
Кортежи неизменны, поэтому они не определяют __iadd__
(+=
).
Списки изменяемые и определяют extend
метод, , который принимает любой итеративный .Таким образом, вы можете делать такие вещи, как:
lst.extend(map(str, range(42)))
аккуратно и удобно.+=
это в основном псевдоним для этого.
Итак:
tuple + tuple
работает list + list
работает tuple + list
не работает, потому что они разных типов list + tuple
также не работает, как и ожидалось list.extend
/ list +=
работает с любыми итерациями, включая кортежи +=
для кортежей выполняется как a = a + b
, потому что они неизменны, поэтому не работает, если a
и b
имеют разные типы