У меня есть этот питон кодРазница между й + = у и х = х + у
x = [1, 2, 3]
y = x
x += [4]
>>> print(y)
[1, 2, 3, 4]
Таким образом, это происходит потому, что x is y
является True
и если я изменю x
, меняю y
Но когда я делаю:
x = [1, 2, 3]
y = x
x = x + [4]
>>> print(y)
[1, 2, 3]
и
>>> id(x) == id(y)
False
Интересно, в чем разница. Я думал, что x += 1
является сокращением для x = x+1
, но, очевидно, должна быть разница.
Я была еще более запутанной, когда я попытался выше строк:
name = 'John'
name_2 = name
name += ' Doe'
>>> print(name_2)
'John'
Так что я думаю, что эффект +=
зависит от объекта, на левой стороне, если она изменчива или нет?
Да, ваше объяснение в последней строке вашего вопроса является правильным. (Ну, в основном, на самом деле это не зависит от того, является ли он изменчивым, но определяет ли он '__iadd__' фактическое мутирование объекта. Но в целом изменяемые типы будут делать это, если они разрешают операцию вообще.) – BrenBarn
См. [In -place Operators] (https://docs.python.org/3/library/operator.html#inplace-operators). – user2864740
@BrenBarn в порядке, и если я делаю 'x = x + 'foo'', он всегда будет создавать новый объект, потому что выражение справа является новым объектом? – Finn