Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ändert „list_arg = list(a)“ nicht die ursprüngliche Liste in „function1“ in Python?

Warum ändert „list_arg = list(a)“ nicht die ursprüngliche Liste in „function1“ in Python?

DDD
DDDOriginal
2024-10-28 21:19:02132Durchsuche

Why does `list_arg = list(a)` not modify the original list in `function1` in Python?

Ändern von Listen als Funktionsparameter in Python

Betrachten Sie den folgenden Code:

<code class="python">def function1(list_arg):
    a = function2()           # function2 returns an array of numbers
    list_arg = list(a)       # creates a new list and assigns it to list_arg

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

Dieser Code versucht zu ändern Die Liste wurde als Parameter an Funktion1 übergeben. Wenn wir die Liste jedoch nach dem Aufruf von Funktion1 ausdrucken, stellen wir fest, dass sie trotz der Zuweisung innerhalb der Funktion unverändert bleibt. Dies liegt daran, dass das Zuweisen einer neuen Liste zu list_arg innerhalb der Funktion den Verweis auf die ursprüngliche Liste unterbricht.

Um die Elemente der Liste an Ort und Stelle zu ändern, können wir Zuweisungs-Slicing verwenden:

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

Diese Zeile weist die Elemente der neuen Liste, die aus a erstellt wurde, dem Slice von list_arg zu, das am Anfang beginnt und bis zum Ende reicht. Dadurch werden die Elemente von list_arg effektiv durch die Elemente von a ersetzt.

Achtung:

In-Place-Listenänderungen können verwirrend sein. Im Allgemeinen wird es vorgezogen, eine neue Liste mit den gewünschten Änderungen zu erstellen und diese der Parametervariablen zuzuweisen, da dadurch eine klare Trennung zwischen der ursprünglichen Liste und der geänderten Liste erhalten bleibt.

Das obige ist der detaillierte Inhalt vonWarum ändert „list_arg = list(a)“ nicht die ursprüngliche Liste in „function1“ 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