liste.append ändert vorherige Elemente

03/05/2009 - 18:26 von Volker Pankalla | Report spam
Hallo,

ich hàtte da eine Frage zwecks Listen an der ich gerade verzweifle.

Zur Verdeutlichung habe ich dir die Ausgabe angehàngt.

Problem ist, dass ich eine Liste habe in der jedes Element wieder eine
Liste ist. Dort möchte ich einfach nur ein neues Element (wieder eine
Liste) mit .append() anhàngen. Aber aus irgend einem Grund veràndert
diese Funktion auch das vorherige Element und ich weiß nicht recht warum.
Vergleiche das letze Element vor liste vor dem Anhàngen
[[8, -9], [-8, -9], [7, 9], [-7, 10, 9], [-4, -7, -10]]
und nachdem das neue Element angefügt wurde, verschwinden aus diesem
Element die beiden "-9" so, dass dann
[[8], [-8], [7, 9], [-7, 10, 9], [-4, -7, -10]]
drin steht.

Wie kann das sein?

Bin für jeden Hinweis dankbar.
Grüße
Volker

-
Ausgabe:

all clauses bevore appending:
[[[1, 2, 3], [1, -2, 3], [4, 5, -3], [1, -4, -3], [6, 5], [-6, 5], [8,
-5, -9], [-8, -5, -9], [7, -5, 9], [-7, 10, 9], [-4, -7, -10]], [[4, 5,
-3], [6, 5], [-6, 5], [8, -9], [-8, -9], [7, 9], [-7, 10, 9], [-4, -7,
-10]], [[8, -9], [-8, -9], [7, 9], [-7, 10, 9], [-4, -7, -10]]]

clause to append:
[[8], [-8], [-4, -7, -10]]

all clauses after appending:
[[[1, 2, 3], [1, -2, 3], [4, 5, -3], [1, -4, -3], [6, 5], [-6, 5], [8,
-5, -9], [-8, -5, -9], [7, -5, 9], [-7, 10, 9], [-4, -7, -10]], [[4, 5,
-3], [6, 5], [-6, 5], [8, -9], [-8, -9], [7, 9], [-7, 10, 9], [-4, -7,
-10]], [[8], [-8], [7, 9], [-7, 10, 9], [-4, -7, -10]], [[8], [-8], [-4,
-7, -10]]]
 

Lesen sie die antworten

#1 Volker Birk
03/05/2009 - 18:40 | Warnen spam
Volker Pankalla wrote:
Vergleiche das letze Element vor liste vor dem Anhàngen
[[8, -9], [-8, -9], [7, 9], [-7, 10, 9], [-4, -7, -10]]
und nachdem das neue Element angefügt wurde, verschwinden aus diesem
Element die beiden "-9" so, dass dann
[[8], [-8], [7, 9], [-7, 10, 9], [-4, -7, -10]]
drin steht.
Wie kann das sein?



Vermutlich hast Du übersehen, dass Listen in Python per Referenz
angefasst werden, und dass man sie explizit kopieren muss, wenn man sie
zweimal will.

Vermutlich sind in der àusseren Liste deshalb Referenzen auf ein und
dieselbe innere Liste, so dass wenn Du diese modifizierst, "beide" (in
Wirklichkeit: ein und dieselbe) Listen modifiziert werden.

Listen kopierst Du mit l2 = l1[:]

Viele Grüsse,
VB.
Bitte beachten Sie auch die Rückseite dieses Schreibens!

Ähnliche fragen