[Python-de] inplace vs binary add
Alexander 'boesi' Bösecke
boesi.josi at gmx.net
Mon Okt 4 08:08:19 CEST 2004
moin
Ich bin auf ein etwas seltsames Verhalten bei verschachtelten Listen
gestossen. inplace und binary add liefern da unterschiedliche Ergebnisse.
>>> liste = [[]] * 5
>>> liste
[[], [], [], [], []]
>>> liste[0] += [1] * 2 # inplace add
>>> liste
[[1, 1], [1, 1], [1, 1], [1, 1], [1, 1]]
>>> liste = [[]] * 5
>>> liste[0] = liste[0] + [1] * 2 # binary add
>>> liste
[[1, 1], [], [], [], []]
Richtig seltsam wird dann das hier...
>>> liste[1] += [2]
>>> liste
[[1, 1], [2], [2], [2], [2]]
inpace multiply wird ebenfalls auf die ganze Liste angewendet. Da
scheint aber irgendwie der angegebene Index irgendwie nicht von
Bedeutung zu sein...
>>> liste[2] *= 2
>>> liste
[[1, 1], [2, 2], [2, 2], [2, 2], [2, 2]]
>>> liste[3] *= 3
>>> liste
[[1, 1], [2, 2, 2, 2, 2, 2], [2, 2, 2, 2, 2, 2], [2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2]]
Hat dieses (fuer mich) komische Verhalten irgendeinen besonderen Grund?
Ich find das so jedenfalls extrem verwirrend, da ich aus Gruenden der
Lesbarkeit eigentlich immer inplace add verwende.
cu boesi
--
baka baka #1671 : icq-intern
#73628288 : icq-extern
boesi111 : aim
i171 : reallife