Ich habe gerade etwas Interessantes in Python2.6 entdeckt und habe mich gefragt, ob das so sein sollte oder es einen Bug gibt. HierPython überschreibt Liste, die in der Klassenfunktion innerhalb einer anderen Funktion in derselben Klasse verwendet wird
ist der Code:
class Test:
def __init__(self, test):
self.test = test
def test1(self, testarg1):
self.test2(testarg1)
return testarg1
def test2(self, testarg1):
testarg1[0] = 9
p1 = Test('test')
print (p1.test1([1,2,3]))
So ist der Code über Rückkehr als Ergebnisliste [9,2,3], aber unter Verwendung von test2
Funktion, die ich nie die geänderte Liste zurückzukehren. Bedenken Sie auch, dass es nicht cool ist, den gleichen Namen für Argumente in Funktionen in derselben Klasse zu haben. Das Ändern der Variablennamen hilft nicht.
Auch die vollständige Zuweisung testarg1
in Funktion test1
zu einer anderen Variablen und die Übergabe es hilft nicht immer noch das Ergebnis oben zurückgeben. Wer kann weiter erklären, warum das passiert?
Listen sind _mutable_ und alles wird von _reference_ übergeben. Sie haben den Inhalt der Liste in "test2" geändert, auch wenn Sie ihn nicht zurückgeben. –
Danke für die Erklärung, habe nicht daran gedacht. In anderen Sprachen verwendet und nie passiert, rate ich muss die Liste kopieren, bevor Sie es für Schecks ändern. –
ja: kopieren wie diese 'list (testarg1)' oder 'testarg1 [:]' –