Zweiter Wert einer (Wert für Wert kopierten) Liste verändert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Juppiter
User
Beiträge: 9
Registriert: Samstag 22. Februar 2014, 21:52

Hallo Leute,
schreibe ein kleines Programm, bei der eine Liste Wert für Wert kopiert wird.

Code: Alles auswählen

kappas=...
hohekappas=[]
for k in kappas:
    hohekappas.append(k)
Das Ergebnis meines Programms, das weiter mit der Kopie (also hohekappas) arbeitet hat mich
überrascht, weshalb ich mir mal beide Listen ausgeben habe lassen:

Code: Alles auswählen

>>> kappas
[0.04122944400939702, 0.020634299138606108, 0.043813625685199684, 0.10199686765857478, 0.05254502740798747, 0.05211433046202036, 0.05387627251370399, 0.07803445575567737, 0.05532498042286609, 0.057008613938919345, 0.05540328895849648, 0.08382928739232576, 0.05634299138606108, 0.05465935787000783, 0.05583398590446359, 0.07995301487862178, 0.055246671887235706, 0.05552075176194205, 0.0538371182458888]
>>> hohekappas
[0.04122944400939702, 6.938893903907228e-18, 0.043813625685199684, 0.10199686765857478, 0.05254502740798747, 0.05211433046202036, 0.05387627251370399, 0.07803445575567737, 0.05532498042286609, 0.057008613938919345, 0.05540328895849648, 0.08382928739232576, 0.05634299138606108, 0.05465935787000783, 0.05583398590446359, 0.07995301487862178, 0.055246671887235706, 0.05552075176194205, 0.0538371182458888]
Wie man sieht, ist der zweite Wert anders.
Wenn ich hohekappas im Programm noch sortieren lasse mit .sort() und es dann ausgebe, sieht das so aus:

Code: Alles auswählen

>>> hohekappas
[0.020634299138606108, 6.938893903907228e-18, 0.043813625685199684, 0.05211433046202036, 0.05254502740798747, 0.0538371182458888, 0.05387627251370399, 0.05465935787000783, 0.055246671887235706, 0.05532498042286609, 0.05540328895849648, 0.05552075176194205, 0.05583398590446359, 0.05634299138606108, 0.057008613938919345, 0.07803445575567737, 0.07995301487862178, 0.08382928739232576, 0.10199686765857478]
Ich hab versucht das Problem mit einigen Integerlisten zu rekonstruieren - ohne Erfolg.
Ist das bei euch vielleicht auch so?
Ich nutze Python 3.4.0 unter Ubuntu 14.04.
Hoffe Ihr könnt mir helfen,
Juppiter
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Zeige mal ein minimales lauffähiges Beispiel, bei dem das Problem auftritt. Mit dem wenigen Code lässt sich das Problem nicht nachvollziehen.

Listen lassen sich übrigens einfacher mittels Slicing kopieren:

Code: Alles auswählen

hohekappas = kappas[:]
Das Leben ist wie ein Tennisball.
Juppiter
User
Beiträge: 9
Registriert: Samstag 22. Februar 2014, 21:52

Hallo EyDu,
erstmal danke für den Tipp mit dem Slicing.
Hab in der Zwischenzeit nochmal mir den Code angeschaut und die kopierte Liste wird als Argument an eine Funktion übergeben.
Hab da vergessen, dass Listen ja call-by-reference übergeben werden. Tut mir Leid wegen des unnötigen Threads,
aber danke für deine Mühe und Hilfsbereitschaft *Daumennachoben*
Juppiter
Antworten