JuSchu85
Mitglied
Ich bringe mir gerad Python mit diesem eBook bei. Dort habe ich gelesen, dass bei Zuweisungen und Parameterübergaben zu Funkktionen und Methoden der Interpreter meistens selbst, je nach Rechenaufwand, entscheidet ob eine Kopie oder eine Referenz übergeben wird.
Ich muss sagen, dass es mich in machen Fällen schon zielich stört, dass man keine Kontrolle darüber hat. Zum Beispiel habe ich ein kleines Skript geschrieben um das Prinzip der "Observer" mal auszuprobieren.
Dabei meldet sich Objekt A bei Objekt B an, indem es sich selbst als Parameter übergibt um von Objekt B dann Nachrichten empfangen zu können. Damit das alles funktioniert muss sich das Objekt ja aber als Referenz und nicht als Kopie übergeben. Es geht hier ja um funktionale Objekte und nicht nur um irgendwelche Werte.
Falls doch eine Kopie von A übergeben wird, weil der Interpreter scheinbar entschieden hat, dass es in diesem Fall weniger Aufwand bedeutet, schickt B seine Nachrichten ja an ein völlig falsches Objekt und die Daten landen im Nirvana.
Oder hab ich da irgendwo einen Denkfehler? Weil mein Skript hat erst mal so funktioniert wie erwartet, aber ich mache mir halt sorgen, dass ich desswegen jetzt denke "Es läuft ja" nur weil der Interpreter in diesem Fall entschieden hat das Objekt als Referenz zu übergeben, es dann in einem anderen Fall später aber vielleich doch als Kopie tut und ich den Fehler nicht finde, weil ich dieses Problem schon längst abgeschlossen habe.
Also gibt es eine Möglichkeit den Interpreter explizit anzuweisen, dass Parameter (oder auch bei einfachen Zuweisungen) als Referenz und nicht als Kopie übergeben werden?
Ich kenne auch das Prinzip der Zeiger in C++ und das gefällt mir auch richtig gut. In Python kann man ja mit der Funktion id() eine Speicheradresse auslesen wie man es bei Zeigern auch machen würde. Gibt es auch ein Gegenstück zu id(), dass mir zu einer Speicheradresse die passende Referenz auf ein Objekt zurückgibt?
Dann könnte ich im Prinzip wie in C++ mit Zeigern arbeiten. Das währe finde ich noch die beste Lösung und man hätte die größte Kontrolle.
Ich muss sagen, dass es mich in machen Fällen schon zielich stört, dass man keine Kontrolle darüber hat. Zum Beispiel habe ich ein kleines Skript geschrieben um das Prinzip der "Observer" mal auszuprobieren.
Dabei meldet sich Objekt A bei Objekt B an, indem es sich selbst als Parameter übergibt um von Objekt B dann Nachrichten empfangen zu können. Damit das alles funktioniert muss sich das Objekt ja aber als Referenz und nicht als Kopie übergeben. Es geht hier ja um funktionale Objekte und nicht nur um irgendwelche Werte.
Falls doch eine Kopie von A übergeben wird, weil der Interpreter scheinbar entschieden hat, dass es in diesem Fall weniger Aufwand bedeutet, schickt B seine Nachrichten ja an ein völlig falsches Objekt und die Daten landen im Nirvana.
Oder hab ich da irgendwo einen Denkfehler? Weil mein Skript hat erst mal so funktioniert wie erwartet, aber ich mache mir halt sorgen, dass ich desswegen jetzt denke "Es läuft ja" nur weil der Interpreter in diesem Fall entschieden hat das Objekt als Referenz zu übergeben, es dann in einem anderen Fall später aber vielleich doch als Kopie tut und ich den Fehler nicht finde, weil ich dieses Problem schon längst abgeschlossen habe.
Also gibt es eine Möglichkeit den Interpreter explizit anzuweisen, dass Parameter (oder auch bei einfachen Zuweisungen) als Referenz und nicht als Kopie übergeben werden?
Ich kenne auch das Prinzip der Zeiger in C++ und das gefällt mir auch richtig gut. In Python kann man ja mit der Funktion id() eine Speicheradresse auslesen wie man es bei Zeigern auch machen würde. Gibt es auch ein Gegenstück zu id(), dass mir zu einer Speicheradresse die passende Referenz auf ein Objekt zurückgibt?
Dann könnte ich im Prinzip wie in C++ mit Zeigern arbeiten. Das währe finde ich noch die beste Lösung und man hätte die größte Kontrolle.