[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