Python a + = b und a = a + b sind unterschiedlich

Einige Sites sagen, dass der Operator "a + = b" derselbe ist wie "a = a + b", aber für veränderbare Objekte nicht genau der gleiche. Seien Sie vorsichtig, wenn Sie Variablen haben, die auf dasselbe Objekt verweisen. (Besonders für diejenigen, die NumPy verwenden!)

Überblick

Kurz gesagt, es gibt die folgenden Unterschiede. Für veränderbare Objekte

Bei unveränderlichen Objekten ändert sich dies jedoch in beiden Fällen (der Kommentar von @ shiracamus enthält ein Beispiel).

Experiment

Experimentieren wir, um "[1, 2, 3]" zu erstellen, indem wir "[3]" zu "[1, 2]" hinzufügen. "y" bezieht sich auf das Objekt von "x" vor der Zuweisung. Sie können die ID eines Objekts mit der integrierten Funktion "id (x)" abrufen.

a += b

>>> x = y = [1, 2]  #y ist das gleiche Objekt wie x vor der Zuweisung
>>>
>>> id(x)
4397797440
>>> id(y)
4397797440
>>>
>>> x += [3]
>>> 
>>> x
[1, 2, 3]
>>> y  #Auch zu y hinzugefügt
[1, 2, 3]
>>>
>>> id(x)  #Gleiches Objekt wie vor der Zuordnung
4397797440
>>> id(y)
4397797440

a = a + b

>>> x = y = [1, 2]  #y ist das gleiche Objekt wie x vor der Zuweisung
>>>
>>> id(x)
4397797440
>>> id(y)
4397797440
>>>
>>> x = x + [3]
>>> 
>>> x
[1, 2, 3]
>>> y  #Nicht zu y hinzugefügt
[1, 2]
>>>
>>> id(x)  #Zeigen auf ein anderes Objekt als vor der Zuweisung
4395937472
>>> id(y)
4397797440

Recommended Posts

Python a + = b und a = a + b sind unterschiedlich
[Python] gibt A [oder / und] B zurück
[Python3] "A // B" und "math.floor (A / B)" sind nicht immer gleich! ??
Python3> rund (a - b, 7)
Python-Memo- "wenn nicht A und B" war "wenn (nicht A) und B"
Das von Python berechnete VIF und das von Excel berechnete VIF sind unterschiedlich.
ABC127 A, B, C Erklärung (Python)
Die Matrix und die Matte von numpy sind unterschiedlich
Anders als der Importtyp von Python. Bedeutung von aus A Import B.
[Python] Was sind @classmethod und Dekorateure?
a () und a .__ call__ () sind nicht gleichwertig
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
ABC128 A, B, C Kommentar (Python)
ABC126 A, B, C Erklärung (Python)
Pythons regulärer Ausdruck, str und unicode sind nüchtern
Löse ABC175 A, B, C mit Python
Module und Pakete in Python sind "Namespaces"
Ein Memo mit Python2.7 und Python3 in CentOS
Verbinde viel Python oder und und
Python> Schlüsselwortargumente> hoge (** {'a': 1, 'b': 2, 'c': 3})
yum und apt update / upgrade sind unterschiedlich
Löse ABC165 A, B, D mit Python
Eine Geschichte über Python Pop und Append
Python open und io.open sind gleich
Organisieren Sie Python-Module und -Pakete in einem Chaos
Erstellen einer Python-Umgebung mit virtualenv und direnv
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Ein netter Nimporter, der Nim und Python verbindet
Wie Python-Klassen und magische Methoden funktionieren.
ffmpeg-Erstellen Sie eine Python-Umgebung und teilen Sie das Video
Ich habe eine Klasse in Python3 und Java geschrieben
Warum ich ein Java-Shop bin und Python starte
Erstellen Sie eine Webmap mit Python und GDAL
Starten Sie einen Webserver mit Python und Flask
Was vergleichst du mit Python und ==?
Schreiben wir ein Python-Programm und führen es aus
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
[Python] Ein grobes Verständnis von Iterablen, Iteratoren und Generatoren
Berücksichtigung der Stärken und Schwächen von Python
Was sind Python Taples und * Args?
C-Sprache zum Sehen und Erinnern Teil 3 Rufen Sie die C-Sprache aus Python auf (Argument) c = a + b
[Python] Komprimieren und dekomprimieren
Ein * Algorithmus (Python Edition)
Python- und Numpy-Tipps
[Python] Pip und Wheel
[Python] Machen Sie einen Screenshot
Python: Erstellen einer virtuellen Umgebung (venv), Starten und Stoppen
Versuchen Sie, eine komprimierte Datei mit Python und zlib zu erstellen
Erstellen Sie ein Python-Modul
Python Iterator und Generator
Erstellen einer R- und Python Docker-Arbeitsumgebung
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Pythons Lambda-Ausdruck ...
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Es wäre klug, wenn Sie etwas wie Boolesches und "A" oder "B" schreiben könnten [Python] [Aber]
Python-Klassen sind langsam
Ruby, Python und Map