Wie kann ich eine Liste von Referenzen eines Objekts in Python bekommen?

7

Alle:

%Vor%

Nun möchte ich eine Liste von Objekt 1 getaggt bekommen, was [a, b, c] ist. Wie könnte ich das tun?

BTW, wie nennt man die Variable "a" hier offiziell? Ich weiß bis jetzt, es ist ein "Objekt-Tag" für das Objekt, aber ich habe keine Ahnung, was ist der Begriff davon.

Danke!

warum brauche ich das:

%Vor%

in einer anderen Sprache wie C, a, b, c sollte 2 sein, wenn ich a = 2 neu ordne, aber in Python gibt es keine solche Sache wie Referenz, also ist der einzige Weg, den Wert von abc zu ändern a = b = c = 2 so weit ich weiß, deshalb soll alles Bezug auf ein Objekt genommen werden.

    
user478514 03.12.2010, 02:29
quelle

7 Antworten

2

Was Sie fragen, ist nicht sehr praktisch und nicht möglich. Hier ist eine verrückte Art, es zu tun:

%Vor%     
Chris Morgan 03.12.2010, 02:38
quelle
9

Wie Sie sehen können, ist es unmöglich, sie alle zu finden.

%Vor%     
Kabie 03.12.2010 03:43
quelle
7

Ich möchte hier einige Fehlinformationen klären. Das hat eigentlich nichts damit zu tun, dass "Ints unveränderlich" sind. Wenn Sie a = 2 schreiben, weisen Sie a und a einem anderen Element zu - dies hat keine Auswirkungen auf b und c .

Wenn Sie eine Eigenschaft von a jedoch ändern würden, dann würde dies bewirken b und c . Hoffentlich illustriert dieses Beispiel besser, worüber ich spreche:

%Vor%     
mpen 01.07.2012 19:01
quelle
3

Ich denke, Sie könnten sich für objgraph interessieren. Sie können das Objektdiagramm im Speicher durchlaufen oder ein PNG des Objektdiagramms ausgeben. Es ist nützlich zum Debugging von Speicherlecks.

Siehe diese Seite: Ссылка

    
Erik Allik 26.08.2012 16:34
quelle
2

Es ist nicht möglich, alle Verweise auf ein bestimmtes Objekt in Python zu finden. Es ist nicht einmal möglich, alle Objekte oder alle Referenzen in Python zu finden. (Die CPython-Funktion gc.get_objects tut dies, aber sie ist in Python-Implementierungen nicht portierbar.)

Sie können dir() oder locals() verwenden, um alle Variablen zu finden, die in einem Bereich des Programms existieren. Aber wenn Objekte an anderen Stellen definiert wurden, könnten Sie sie mit dieser Methode vermissen.

    
Heatsink 03.12.2010 02:42
quelle
1

Zuerst in C, "=" ist eine Wertzuweisung und erstellt keine Referenz. Genauer gesagt, wenn Sie a = b = 1 schreiben, geschieht dies.

(1) b = 1 wird ausgewertet, weist 1 zu b zu und gibt dann 1 zurück, so dass der Ausdruck a = 1

wird

(2) a = 1 wird ausgewertet, ordnet 1 zu b zu und gibt dann 1 zurück, das nicht verwendet wird.

Dann ändert sich a = 1 nur wie erwartet.

In Python sind Dinge etwas komplizierter, da jede Variable eine Referenz ist, aber sie behandelt Zahlen anders, weil sie unveränderlich sind. Kurz gesagt, wenn Sie a = 1 und b = 1 schreiben, dann ist a ist b gibt True zurück. Aber das Ändern eines wird das andere nicht ändern.

Dies geschieht jedoch nicht mit Objekten, bei denen eine Referenz wie erwartet funktioniert. Wenn Sie also das tun wollen, was Sie beschreiben, sollten Sie vielleicht ein neues Objekt definieren, das den gewünschten Wert enthält, und dieses einer Variablen zuweisen.

    
tst 26.10.2011 17:52
quelle
0

Sieh dir Pyjack an. Die Funktion replace_all_refs scheint ziemlich gut zu funktionieren, um alle Referenzen auf ein Objekt zu ersetzen. Hinweis: Funktioniert nicht gut mit String-Objekten.

    
user2682863 14.08.2013 14:36
quelle

Tags und Links