Seite 1 von 1

Zuweisungs-Problem mit mehrdimensionaler Liste

Verfasst: Mittwoch 17. August 2005, 22:50
von andy
# Hallo Leute, bin auf ein Problem gestossen
# mit dem ich nicht so recht klarkomme.
# Evtl. kann mir einer von euch erklaeren
# was hier falsch laeuft.

# Man erzeuge eine mehrdimensionale Liste
# mit Multiplikatoren etwa wie folgt:

>>> x=[[0]*3]*2
>>> x
[[0, 0, 0], [0, 0, 0]]
>>> x[1][1]=7 # ein Element soll veraendert werden
>>> x
[[0, 7, 0], [0, 7, 0]] # aber zwei Elemente bekommen die 7



# Wenn man dagegen die Initialisierung
# auf folgende Art macht ist alles o.k.

>>> x=[[0, 0, 0], [0, 0, 0]]
>>> x
[[0, 0, 0], [0, 0, 0]]
>>> x[1][1]=7
>>> x
[[0, 0, 0], [0, 7, 0]] # nur ein Element bekommt die 7
>>>



# is it a bug or a feature?

# Sollte das jetzt was Dummes gewesen sein,
# so moege man mir verzeihen, bin Anfaenger!!

# Obiges Beispiel wurde unter:
Python 2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit (Intel)] on win32
# ausgefuehrt (gleicher Effekt unter Linux)

# Vielen Dank für eure Hilfe.

Verfasst: Mittwoch 17. August 2005, 23:07
von rayo
Hi

Also das ist weil er bei der 1. Version zuerst [0,0,0] erstellt ([0]*3). Und dann macht er 2*[0,0,0] -> daher erstellt er keine neue Liste, sondern die beiden Elemente der Liste zeigen 2mal auf die gleiche Liste (auf [0,0,0]).

Also kommts nicht darauf an ob du x[0] oder x[1] ansprichst, weil es beides mal die gleiche Liste ist.

ein kleines Beispiel:

Code: Alles auswählen

a = []
b = a
b.append(33)

print a
print b
Hier zeigen auch a und b auf die selbe Liste, genau gleich gehts bei der Liste wenn du sie mit * kopierst.

Gruss

Verfasst: Mittwoch 17. August 2005, 23:50
von andy
Danke fuer deine schnelle Antwort