Wie bereits erwähnt, b += 1
Updates b
an Ort und Stelle, während a = a + 1
a + 1
und dann Abtretungsempfänger berechnet der Name a
zum Ergebnis (jetzt a
verweist nicht mehr auf eine Zeile A
).
Um die +=
Bediener richtig obwohl zu verstehen, brauchen wir das Konzept der wandelbar gegen unveränderlichen Objekte zu verstehen, auch. Überlegen Sie, was passiert, wenn wir die .reshape
auslassen:
C = np.arange(12)
for c in C:
c += 1
print(C) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
Wir sehen, dass C
ist nicht aktualisiert, was bedeutet, dass c += 1
und c = c + 1
gleichwertig sind. Dies liegt daran, dass C
nun ein 1D-Array ist (C.ndim == 1
), und daher beim Iterieren über C
jedes Integer-Element herausgezogen und einem c
zugewiesen wird.
nun in Python, ganze Zahlen sind unveränderlich, was bedeutet, dass effektiv in-Place-Updates sind nicht erlaubt, c += 1
in c = c + 1
verwandeln, wo c
bezieht sich nun auf eine ganze Zahl neuen, nicht gekoppelt C
in keiner Weise.Wenn Sie die umgeformten Arrays durchlaufen, werden ganze Zeilen (np.ndarray
s) gleichzeitig b
(und a
) zugewiesen, die veränderbare Objekte sind, was bedeutet, dass Sie nach Belieben neue Ganzzahlen einfügen können tun a += 1
.
Es sollte erwähnt werden, dass, obwohl +
und +=
ment sind, wie oben beschrieben bezogen werden (und sehr viel in der Regel sind), können sie jede Art implementieren eine Möglichkeit, es durch die Definition der __add__
und __iadd__
Methoden will, respectively.
'i = i + 1 '' I' neu zuweist, 'i + = 1' Schritten' I' von '1' – juniorRubyist
Haben Sie feststellen, dass Sie in den Zeilen des Arrays iterieren, nicht die einzelnen Elemente? – hpaulj
auf der ganzen Linie Ich + = 1 verhindert eine Anweisung in Assembly Sprachlevel –