Различное поведение для list .__ iadd__ и list .__ add__ - PullRequest
12 голосов
/ 19 марта 2012

рассмотрите следующий код:

>>> x = y = [1, 2, 3, 4]
>>> x += [4]
>>> x
[1, 2, 3, 4, 4]
>>> y
[1, 2, 3, 4, 4]

, а затем рассмотрите это:

>>> x = y = [1, 2, 3, 4]
>>> x = x + [4]
>>> x
[1, 2, 3, 4, 4]
>>> y
[1, 2, 3, 4]

Почему есть разница между этими двумя?

(И да, я пытался найти это).

Ответы [ 2 ]

26 голосов
/ 19 марта 2012

__iadd__ изменяет список, тогда как __add__ возвращает новый список, как продемонстрировано.

Выражение x += y сначала пытается вызвать __iadd__ и, в случае неудачичто звонки __add__ следуют за назначением (см. комментарий Свена для незначительного исправления).Так как list имеет __iadd__, он выполняет эту маленькую магию мутаций.

4 голосов
/ 19 марта 2012

Первый мутирует список, а второй связывает имя заново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...