Hat Python unveränderliche Listen?
Angenommen, ich möchte die Funktionalität einer geordneten Sammlung von Elementen haben, aber was ich garantieren möchte, ändert sich nicht. Wie kann dies implementiert werden? Listen werden bestellt, können aber mutiert werden.
Antworten:
Ja. Es heißt a
tuple
.Also, anstatt
[1,2]
welches ist alist
und was mutiert werden kann,(1,2)
ist atuple
und kann nicht.Weitere Informationen:
Ein Element
tuple
kann nicht durch Schreiben instanziiert werden(1)
, sondern Sie müssen schreiben(1,)
. Dies liegt daran, dass der Interpreter verschiedene andere Verwendungszwecke für Klammern hat.Sie können auch Klammern ganz weglassen:
1,2
ist das gleiche wie(1,2)
Beachten Sie, dass ein Tupel nicht gerade eine unveränderliche Liste ist. Klicken Sie hier, um mehr über die Unterschiede zwischen Listen und Tupeln zu erfahren
quelle
([1,2],3)
), ist das Tupel nicht mehr wirklich unveränderlich, da das Listenobjekt nur ein Zeiger auf ein veränderbares Objekt ist und das referenzierte Objekt nicht veränderbar ist.()
. Dies ist der einzige Fall, in dem die Klammern erforderlich sind.(3,4,5)
hat einen ganz anderen(int x int x int)
Typ[3,4,5]
- als der Typ(listof int)
. Das Tupel von Python scheint jedoch einer unveränderlichen Liste näher zu sein: Insbesondere können sie wiederholt werden, und es scheint, dass sie auch gefiltert und zugeordnet werden können.Hier ist eine ImmutableList-Implementierung. Die zugrunde liegende Liste wird in keinem direkten Datenelement angezeigt. Der Zugriff kann jedoch über die Closure- Eigenschaft der Member-Funktion erfolgen. Wenn wir der Konvention folgen, den Inhalt des Abschlusses nicht mit der obigen Eigenschaft zu ändern, wird diese Implementierung den Zweck erfüllen. Die Instanz dieser ImmutableList-Klasse kann überall dort verwendet werden, wo eine normale Python-Liste erwartet wird.
quelle
Sie können eine unveränderliche, einfach verknüpfte Liste im Lisp-Stil mithilfe von Tupeln mit zwei Elementen simulieren (Hinweis: Dies unterscheidet sich von der Tupelantwort für beliebige Elemente , wodurch ein Tupel erstellt wird, das viel weniger flexibel ist):
zB für die Liste hätten
[1, 2, 3]
Sie folgendes:Ihr Standard
car
und Ihrecdr
Funktionen sind unkompliziert:Da diese Liste einzeln verknüpft ist, ist das Anhängen an die Vorderseite O (1). Da diese Liste unveränderlich ist, können Sie jede Unterliste, die in einer anderen Liste wiederverwendet werden soll, sicher freigeben, wenn die zugrunde liegenden Elemente in der Liste ebenfalls unveränderlich sind.
quelle
Wenn es jedoch ein Tupel von Arrays und Tupeln gibt, kann das Array in einem Tupel geändert werden.
quelle
_private_variables
) einhält und nicht die Durchsetzung durch den Interpreter./proc/#/mem
unsichere Bibliotheken oder was auch immer schreiben oder gegen diese verlinken, um das Modell zu brechen.List und Tuple unterscheiden sich in ihrem Arbeitsstil.
In LIST können wir nach der Erstellung Änderungen vornehmen. Wenn Sie jedoch eine geordnete Reihenfolge wünschen, in der in Zukunft keine Änderungen mehr vorgenommen werden können, können Sie TUPLE verwenden.
weitere Informationen::
quelle
Anstelle von Tupel können Sie auch Frozenset verwenden. frozenset schafft ein unveränderliches Set. Sie können list als Mitglied von frozenset verwenden und mit single for loop auf jedes Element der Liste in frozenset zugreifen.
quelle