ich bin auf ein seltsames Verhalten einer Liste gestoßen, das ich mir nicht erklären kann. Je nachdem wie ich die Liste erzeuge, ergibt sich später bei der Änderung eines Elementes, dass mehrere Elemente geändert werden oder nur das eine. Es scheint so zu sein, dass ein dynamisches Erzeugen der Liste (siehe f1) den Fehler provoziert. Erstelle ich die Liste direkt (siehe f), so bleibt der Fehler aus. Ich bin schon etwas verwirrt, zumal Python die beiden Listen für gleich hält. Kann mir jemand einen Tipp geben? Gerne lese ich auch irgendetwas nach, wenn ich weiß, wo.
Viele Grüße
Klaus Merkert
Code: Alles auswählen
zeile = [6,6,6,6] # nicht ok
f1 = []
for i in range(3):
# f.append(zeile)
f1 = f1 + [zeile]
f = [[6,6,6,6],[6,6,6,6],[6,6,6,6]] # ok
"""
f = [] # ok
for i in range(3):
f = f + [[6,6,6,6]]
"""
"""
f = [[6]*4]*3 # nicht ok
"""
"""
zeile = list(((6,)*4)) # nicht ok
f = []
for i in range(3):
f = f + [zeile]
"""
print('f==f1?',f==f1)
print('mit f1 nicht ok')
print(f1)
f1[0][2] = 1
print(f1)
print('mit f ok')
print(f)
f[0][2] = 1
print(f)
Code: Alles auswählen
>>>
f==f1? True
mit f1 nicht ok
[[6, 6, 6, 6], [6, 6, 6, 6], [6, 6, 6, 6]]
[[6, 6, 1, 6], [6, 6, 1, 6], [6, 6, 1, 6]]
mit f ok
[[6, 6, 6, 6], [6, 6, 6, 6], [6, 6, 6, 6]]
[[6, 6, 1, 6], [6, 6, 6, 6], [6, 6, 6, 6]]
>>>