Einen Zeiger auf ein element in der Liste
Ich Frage mich, ob es möglich war, einen "Zeiger" auf ein element in einer python-Liste. So, ich wäre in der Lage, Zugang zu meinem element direkt ohne zu wissen, mein element ist index. Was ich damit meine, ist, dass in einer Liste, fügen Sie Elemente überall; am Anfang, in der Mitte oder auch am Ende, aber die einzelnen Elemente nicht bewegt von Ihrem eigentlichen Speicherort. In der Theorie sollte es möglich sein, etwas zu tun:
myList = [1]
[1]
element = &myList[0]
element handeln würde, als ein Zeiger hier.
myList.insert(0, 0)
myList.append(2)
[0, 1, 2]
In diesem Punkt, würde ich immer noch in der Lage sein, um Zugriff auf das element direkt, obwohl es der index innerhalb der Liste sich geändert hat.
Der Grund, warum ich dies tun wollen ist, weil in meinem Programm, es wäre viel zu mühsam, Sie zu verfolgen, jeden Artikel, den ich zu meiner Liste hinzufügen. Jedes Element wird erzeugt, indem ein Objekt. Einmal in eine Weile, wird das Objekt um den Wert zu aktualisieren, aber es kann nicht garantiert werden, dass Sie werden feststellen, der Eintrag auf der selben index wie, wenn Sie Hinzugefügt wurde. Mit einem Zeiger würde das problem lösen. Ich hoffe, das macht Sinn.
Was der richtige Weg wäre, etwas zu tun, wie das in Python?
pointer = id(myList[0])
Aber Sie können nicht viel mit 🙂Das war schnell! Dies führte mich zu finden, die folgenden: stackoverflow.com/questions/1396668/python-get-object-by-id
Empfohlene Lektüre: Drastisch Verbessern Sie Ihre Python: Grundlegendes zu Python-Ausführung Modell
Danke! Ich habe Sinn, etwas zu Lesen, so für eine Weile.
InformationsquelleAutor Apos | 2013-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es kein Konzept von Zeigern auf python (zumindest, dass ich bewusst bin).
Fall, speichern Sie die Objekte in Ihrer Liste, können Sie einfach halten eine Referenz auf das Objekt.
In dem Fall speichern Sie die primitiven Werte in Ihrer Liste, der Ansatz, den ich nehmen würde ist ein wrapper-Objekt um den Wert/die Werte und halten eine Referenz des Objekts, um es später zu verwenden, ohne Zugriff auf die Liste. Auf diese Weise werden Ihre wrapper arbeitet als ein veränderliches Objekt und kann geändert werden, egal von wo Sie sind accesing.
Beispiel:
Keine probs, froh zu helfen :3
Ich denke, das ist ein guter Vorschlag, aber denke, Sie sollten das Beispiel, um zu zeigen, dass
obj
noch ReferenzenFooWrapper(5)
auch nach "etwas" wurde eingefügt in der vor dem in der Liste.fertig! Danke für die weitere Anregung :]
InformationsquelleAutor asermax
element = mylist[0]
funktioniert bereits, wenn Sie nicht brauchen, ändern Sie das element oder, wennelement
ist ein veränderliches Objekt.Unveränderliche Objekte wie
int
Objekte in Python, die Sie nicht ändern können. Darüber hinaus können Sie beziehen sich auf dasselbe Objekt mit mehreren Namen in Python z.B.sys.getrefcount(1)
ist ~2000 in einem frischen REPL auf meinem system. Natürlich, Sie wollen nicht1
zu bedeuten2
plötzlich an all diesen stellen.Wenn Sie ändern möchten, ein Objekt, das später dann sollte es wandelbar ist, z.B., wenn
mylist[0] == [1]
dann um den Wert zu ändern, können Sieelement[0] = 2
. Ein benutzerdefiniertes Objekt, das anstelle des[1]
Liste könnte besser geeignet für eine bestimmte Anwendung.Als alternative könnten Sie ein Wörterbuch (oder andere namespace-Objekte wie
types.SimpleNamespace
) anstelle dermylist
Liste. Dann ändern Sie das Element, Referenz durch seinen Namen:mydict["a"] = 2
.InformationsquelleAutor jfs