Seite 2 von 2
Re: Liste in Liste-Problem
Verfasst: Sonntag 7. Februar 2021, 18:37
von __blackjack__
@NWA: Wie gesagt, der `list()`-Aufruf hat den Vorteil a) mit jedem iterierbaren Objekt zu funktionieren und b) garantiert eine Liste zu liefern (und c) schon in Python 2 und <3.3 vorhanden zu sein). Und `copy()` hat den Vorteil garantiert eine (flache) Kopie zu liefern. Und beide sind IMHO lesbarer als slicing. Zumindest kann man nach beidem leichter in der Dokumentation suchen, falls man nicht weiss was das bedeutet. Wobei `copy()` schon vom Namen her recht selbsterklärend ist.
Was ist denn das Problem beim slicing von „immutables”? Also ein kompletter slice ``immutable[:]`` macht nicht so wirklich viel Sinn, aber ein Problem ist das ja auch nicht wirklich.
Re: Liste in Liste-Problem
Verfasst: Sonntag 7. Februar 2021, 19:31
von NWA
Hier ist im Buch auf S. 156 folgender code:
Als Ergebnis wird TRUE ausgegeben. Sprich: slicing klappt hier nicht. Als Begründung wird hier geschrieben das immutable Datentypen keinen Unterschied macht, ob die Instanz wirklich kopiert oder mit der ursprünglichen Instanz gearbeitet wird, da der Wert ohnehin nicht geändert werden kann. Aus Gründen der Effizienz wird deshalb nur neu referenziert.
Re: Liste in Liste-Problem
Verfasst: Sonntag 7. Februar 2021, 20:00
von Sirius3
Und wo ist das Problem? Slicing klappt exakt so, wie es vorgesehen ist. Niemand sagt, dass [:] eine Kopie liefern muß, da ist `list` eher die Ausnahme und deshalb sollte man das nicht in Fällen verwenden, wo eine Kopie gewollt ist.
Re: Liste in Liste-Problem
Verfasst: Sonntag 7. Februar 2021, 20:53
von __blackjack__
Ich hatte ja Numpy-Arrays schon erwähnt, wo das auch nicht (immer) eine Kopie erzeugt, und die sind *nicht* immutable, also hat das auch überhaupt nichts mit mutable vs. immutable zu tun:
Code: Alles auswählen
In [489]: A = np.array([1, 2, 3, 4, 5])
In [490]: B = A[:]
In [491]: A is B
Out[491]: False
In [492]: A[0] = 42
In [493]: A
Out[493]: array([42, 2, 3, 4, 5])
In [494]: B
Out[494]: array([42, 2, 3, 4, 5])
Obwohl A und B *nicht* identisch sind, ist das trotzdem keine unabhängige Kopie die da durch slicing erstellt wird. Es ist zwar ein anderes/neues Objekt, das aber ”nur” einen ”view” auf das ursprüngliche Objekt ist.
Re: Liste in Liste-Problem
Verfasst: Montag 8. Februar 2021, 04:46
von sparrow
Das wird sicher noch interessant, wenn die Kapitel über __klassen kommen...