Когда вы делаете это, вы модифицируете объект a
:
a.x = a.x + 1
Когда вы делаете это, вы меняете, к какой переменной относится b
:
b = b + 1
Другими словами, существует большая разница между b
и x
в приведенном выше коде: b
является переменной, а x
является атрибутом a
.
Присвоение чего-либо переменной не приводит к изменению каких-либо объектов, и, следовательно, влияет только на переменную, которой было присвоено *, тогда как установка значения атрибута изменяет объект, который можно увидеть в любая переменная, которая ссылается на этот объект.
* Есть также изменения в подсчетах, влияющие на сборщик мусора, но это не актуально.