Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ändert das Zuweisen einer neuen Liste zu einem Funktionsargument nicht die ursprüngliche Liste in Python?

Warum ändert das Zuweisen einer neuen Liste zu einem Funktionsargument nicht die ursprüngliche Liste in Python?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 11:42:02998Durchsuche

Why Does Assigning a New List to a Function Argument Not Modify the Original List in Python?

Ändern einer Liste im Rahmen einer Funktion

Wenn in Python eine Funktion eine Liste als Argument empfängt, wird der Parameter effektiv zu einer Referenz, die auf den Speicherort der ursprünglichen Liste verweist in Erinnerung. Alle an der Liste innerhalb der Funktion vorgenommenen Änderungen werden direkt in der Aufrufliste widergespiegelt.

Der folgende Code zeigt jedoch ein eigenartiges Verhalten, das dieses Verständnis in Frage stellt:

<code class="python">def function1(list_arg):
   a = function2()  # function2 returns an array of numbers
   list_arg = list(a)

list1 = [0] * 5
function1(list1)
print(list1)
# [0, 0, 0, 0, 0]</code>

In diesem Beispiel Wir beabsichtigen, dass Funktion1 Liste1 ändert, indem ihre Elemente durch diejenigen aus Array a ersetzt werden. Das Ergebnis zeigt jedoch, dass Liste1 unverändert bleibt. Warum passiert das?

Enthüllung der Neuzuweisungsfalle

Das Problem ergibt sich aus der falschen Annahme, dass die Zuweisung eines neuen Werts zur Variablen list_arg innerhalb von Funktion1 die ursprüngliche Liste ändert. In Wirklichkeit ändert diese Zuweisung nur die Referenz von list_arg, sodass sie auf ein anderes Objekt im Speicher zeigt. Die ursprüngliche Liste, auf die der aufrufende Code verweist, bleibt unberührt.

Erzielung der gewünschten Änderung

Um die ursprüngliche Liste innerhalb von Funktion1 erfolgreich zu ändern, müssen wir ihre einzelnen Elemente ändern. Dies kann durch Slice-Zuweisung erreicht werden:

<code class="python">list_arg[:] = list(a)</code>

Slice-Zuweisung ersetzt den gesamten Bereich der Elemente in list_arg durch die Werte aus list(a). Tatsächlich ändert diese Aktion direkt die ursprüngliche Liste.

Ein Vorsichtshinweis

Während die Slice-Zuweisung eine praktische Lösung darstellt, ist es wichtig, das Potenzial für Verwirrung zu beachten. Durch die Änderung einer vorhandenen Liste wird der Code weniger transparent und anfälliger für Missverständnisse seitens anderer Entwickler, die ihn verwalten. Erwägen Sie alternative Ansätze, z. B. die Rückgabe einer neuen geänderten Liste aus der Funktion, um die Klarheit und Lesbarkeit des Codes zu verbessern.

Das obige ist der detaillierte Inhalt vonWarum ändert das Zuweisen einer neuen Liste zu einem Funktionsargument nicht die ursprüngliche Liste in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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