Pass durch Referenz vs. Wert in Python

Pass durch Referenz vs. Wert in Python
Nachdem Sie Python kennen. Viele Sprachen verwenden Methodenargumente als Referenzen, die als Übergabe auf aktuelle Variablen definiert sind. Wenn Sie ein fortgeschrittener Python -Entwickler sind, der Pythons besondere Art, Methodenargumente zu behandeln.

Python unterstützt Pass für Objektreferenz

Pass-by-Reference und Pass-by-Wert sind unbestreitbar die beiden am besten anerkannten und leicht verständlichen Möglichkeiten, um zwischen den Programmiersprachen zu bestehen, um Parameter zu bestehen. Python ist leider 'pass-by-object-reference', weder "nach Wert" noch "Pass" durch Referenz ", oft als" Anruf nach Objektreferenz "als auch" Anruf durch Freigabe.„Es ist nützlich, das Konzept selbst genauer zu betrachten, indem Sie es in Segmente aufteilt, während Sie in die technischen Einzelheiten des Übergangs von Referenz eintauchen:

Passieren: Dies bedeutet, eine Methode mit einem Argument zu liefern.

Durch Bezugnahme: Dies bedeutet, dass das Argument, das Sie auf die Methode übergehen.

Wenn Sie der Methode eine Verweise auf eine definierte Variable zuweisen, wird die Variable, der sie entspricht. Betrachten wir nun ein Beispiel dafür, wie dies in der Praxis funktioniert. In diesem Beispiel haben wir eine Variable definiert 'arg ' einen Wert haben 4. In diesem Szenario die Variable 'arg ' war an seiner Stelle nicht modifiziert. Python scheint Ihr bereitgestelltes Argument anstelle eines Verweiss auf eine vorliegende Variable als in sich geschlossener Wert zu behandeln.

Würde dies bedeuten, dass Python statt durch Referenz Argumente nach Wert bewegt? Python bewegt Argumente durch Zuordnung, weder durch Bezugnahme noch mit Wert. Die Logik dafür ist zweifach:

Derzeit ist der Passieren der Parameter ein Zeiger auf ein Objekt. Bestimmte Arten von Daten sind veränderlich und einige nicht veränderlich.

Wenn wir ein veränderliches Objekt in eine Funktion bewegen, erfasst die Funktion einen Hinweis auf dasselbe Objekt, sodass Sie alles zur Zufriedenheit Ihrer Seele mutieren können. Das externe Bereich würde jedoch nichts wissen, bevor Sie in die Funktion zurückkehren. Sobald Sie fertig sind, zielt die externe Referenz nur auf das tatsächliche Objekt ab. Wenn Sie ein unveränderliches Objekt in eine Funktion verschieben, kann die externe Referenz immer nicht neu gebunden werden und Sie können das Objekt nicht einfach mutieren. Um die Dinge viel einfacher zu machen, lassen Sie uns nacheinander verstehen.

Durch Referenz passieren

Zunächst müssen Sie verstehen, dass die Variable 'MyList' selbst keine Liste ist, sondern auf eine Liste mit Werten bezieht. Sie können die Variable 'MyList' einen Container mit Werten in ihr aufrufen. Die Listenwerte sind Objekte. Die Variable "MyList" wurde gerade mit ihrem Inhalt in die Funktion geliefert.

Sowohl "Liste" als auch "meine Liste" scheinen im folgenden Code -Beispiel dieselbe Speichervariable zu sein und somit auf das gleiche Speicherobjekt zu gelten. Deshalb druckt es bei der Ausgabe von Saeed.''

Jede Aktion auf die Variable oder Entität wird sofort auf die Anrufermethode widerspiegelt. Die Methode kann den Wert der Variablen vollständig ändern und auf ein völlig unterschiedliches Objekt richten. Wie Sie in der Funktion 'set_list' sehen können, haben wir den Listeninhalt geändert und eine ganz neue Liste mit dem Element 'AQSA gedruckt.'Dies liegt daran, dass wir die modifizierte Liste zurückgegeben und in derselben Zeile wie der Anrufer gedruckt haben.

Die Methode kann auch die Elemente der Variablen für dasselbe Ergebnis wie unten neu zuweisen. Sie können sehen, dass wir einen neuen Wert der Liste angehängt haben, und die Änderung wurde reflektiert. Wir haben eine eindeutige Zeichenfolge an eine Liste angehängt und an den Anrufer zurückgegeben. Abschließend haben die Methode und der Anrufer die gleiche Variable und das gleiche Objekt in der gesamten Pass-by-Beziehung verwendet.

Nach Wert passieren

Durch Pass -By Value wird die Methode mit einem Duplikat des Argumentobjekts geliefert, das der Anrufer ihm zuweist. Dadurch wird sichergestellt.

Es ist gleichermaßen gültig mit allen Operationen, die auf einer Variablen oder der Entität nach der Methode ausgeführt werden. Duplikate von Variablen und Objekten im Bereich der Anrufermethode sind vollständig getrennt, um sie zusammenzufassen.

Objekt durch Referenz passieren

Da Python in dieser Situation unterschiedlich ist, erhalten die Methoden von Python die sehr ähnliche Objektreferenz im Speicher, wenn sich der Anrufer bezieht. Umgekehrt erhält die Technik nicht die Variable 'MyList' (den Container). Die Anrufermethode speichert dasselbe Objekt; Die Methode erzeugt den eigenen Container und erzeugt einen insgesamt einen völlig frischen Index für sich, genau wie in Pass-by-Wert.

Der Anrufer und die Methode sprechen im Speicher von demselben Objekt. Sie haben mehrere Etiketten, aber sie sind die gleichen Dinge. Beide Variablen haben ein sehr ähnliches Objekt. Das ist der Sinn, hinterhand seiner Beziehung zu Bewegung durch das Objekt. Im Speicher verwenden die Methode und der Anrufer ein ähnliches Objekt, fangen sie jedoch über mehrere Variablen auf. Die Anrufervariable (der Container) wird nicht durch Änderungen an der Methodenvariablen (dem Container) geändert. Nur die Daten oder der Inhalt werden geändert.

Abschluss

Python arbeitet unabhängig von Sprachen, die das Umzug durch Referenz oder den Wert von Argumenten akzeptieren. Methodenargumente sind lokale Variablen, die jedem an die Methode übertragenen Wert zugeteilt wurden. Das schließt Sie jedoch immer noch nicht davon ab, die gleichen Ergebnisse zu erzielen, die Sie in anderen Sprachen finden würden, während Sie Argumente durch Proxy verschieben.