Seite 1 von 1
Liste, Änderungen werden funktionsübergreifend übernommen
Verfasst: Freitag 21. November 2008, 11:20
von Nergal
Hallo,
ich habe ein Problem mit der Listenfunktion pop() und demErsetzen von Einträgen.
Ich denke, der Code erklärt mein Problem besser, als ich es beschreiben könnte.
Code: Alles auswählen
def DoSomething(A):
A[0] = [5, 6]
B = A.pop()
return
A = [[1, 2], [3, 4]]
print A
DoSomething(A)
print A
liefert als Ergebnis:
Wieso wird A nicht nur in der Funktion verändert bzw. was kann ich tun, damit es nur in der Funktion verändert wird?
Verfasst: Freitag 21. November 2008, 11:35
von helduel
Moin,
in Python werden immer Referenzen übergeben und keine Kopien. Wenn du eine Kopie haben willst, kannst du das mit:
in deiner Funktion machen.
Gruß,
Manuel
Verfasst: Freitag 21. November 2008, 11:43
von Nergal
Bei den Standartdatentypen wie String, int, ... ist dies aber scheinbar nicht der Fall.
Wenn ich an Diesen innerhalb von Funktionen Änderungen vornehme, machen sich Diese nicht funktionsübergreifend bemerkbar.
Aber danke für den Tip, hatte es zuerst ohne [:] probiert. Da gab es aber auch wieder Probleme, da es sich scheinbar wieder nur um eine Referenz handelt.
Verfasst: Freitag 21. November 2008, 11:50
von BlackJack
@Nergal: Du kannst an Zeichenketten und Zahlen keine Änderungen vornehmen, die sind unveränderbar. Du kannst höchstens innerhalb einer Funktion an den lokalen Namen neue Objekte binden, das hat natürlich keinen Einfluss auf andere Namen und die Objekte an die sie gebunden sind.
Verfasst: Freitag 21. November 2008, 11:53
von Leonidas
Nergal hat geschrieben:Bei den Standartdatentypen wie String, int, ... ist dies aber scheinbar nicht der Fall.
Weil du Strings nicht verändern kannst, daher kommt so ein Problem nicht vor.
Nergal hat geschrieben:Wenn ich an Diesen innerhalb von Funktionen Änderungen vornehme, machen sich Diese nicht funktionsübergreifend bemerkbar.
Letztendlich ist es ganau das
was hier diskutiert wurde.