Heim > Backend-Entwicklung > Python-Tutorial > Seien Sie vorsichtig mit dem *doppelten Zeichen (Operator) in Python

Seien Sie vorsichtig mit dem *doppelten Zeichen (Operator) in Python

大家讲道理
Freigeben: 2016-11-07 17:21:23
Original
1344 Leute haben es durchsucht

In Python gibt es ein spezielles Symbol „*“, das als Multiplikationsoperator für numerische Operationen und als Wiederholungsoperator für Objekte verwendet werden kann. Bei der Verwendung als Wiederholungsoperator müssen Sie jedoch aufpassen

Hinweis: * Jedes wiederholte Objekt hat dieselbe ID, was bedeutet, dass es auf dieselbe Adresse im Speicher verweist. Sie müssen bei der Bedienung jedes Objekts darauf achten.

Zum Beispiel:

>>> alist = [range(3)]*4
>>> alist
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
Nach dem Login kopieren

Das Obige initialisiert eine zweistufige Liste, um die Matrix zu simulieren. Der Einfachheit halber ist die Matrix. die Matrix wird hier als A aufgezeichnet.

Jetzt möchte ich A11 den Wert 1 zuweisen, indem ich den folgenden Code verwende:

alist[0][0]=1
Nach dem Login kopieren

Dann sollte das gewünschte Ergebnis sein:

[[1, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
Nach dem Login kopieren

Aber leider bekommen wir Folgendes:

[[1, 1, 2], [1, 1, 2], [1, 1, 2], [ 1, 1, 2]]

Warum ist der Wert A21 zugewiesen und warum ändern sich andere Ai1s entsprechend?

Der Grund ist folgender:

Wir haben es bereits am Anfang des Artikels gesagt * Jedes wiederholte Objekt hat dieselbe ID, was bedeutet, dass es auf dieselbe Adresse im Speicher verweist. Sie müssen bei der Bedienung jedes Objekts aufmerksam sein.

Wir haben bei der Initialisierung den Wiederholungsoperator „*“ verwendet. Wenn dieser Operator Operationen an Objekten wiederholt, verweist er alle wiederholten Objekte auf dieselbe Speicheradresse. Wenn Sie also einen Wert ändern,

Andere Werte werden natürlich aktualisiert. Die Erklärung in Python ist der folgende Befehl und die folgende Ausgabe:

>>> id(alist[0])
18858192
>>> id(alist[1])
18858192
>>> id(alist[2])
18858192
>>> id(alist[3])
18858192
>>>
Nach dem Login kopieren

Siehe es, id Sie sind alle gleich bedeutet, dass diese 4 Listen dieselbe „Liste“ sind.

Was sollen wir in diesem Fall tun, wenn wir eine Matrix simulieren möchten? Zusätzlich zum speziellen Numpy-Paket können Sie natürlich nacheinander neue Listen an die Liste der oberen Ebene anhängen, zum Beispiel:

>>> blist=[]
>>> for i in range(4):
    blist.append([j for j in range(3)])
>>> blist
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
Nach dem Login kopieren

Auf diese Weise versuchen wir den obigen Zuweisungsvorgang noch einmal:

>>> blist[0][0]=1
>>> blist
[[1, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
>>>
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage