Seite 1 von 1
Kleine Frage zu variablen Objekten
Verfasst: Montag 18. Oktober 2010, 16:32
von Gremlin
Hallo,
hätte da mal eine Verständnisfrage zu Listen und Dictionaries.
Was passiert bei folgendem Beispiel im Hintergrund mit "new_dict" wenn die Funktion zu Ende ist?
Wird "DATA" weiterhin
permanent auf "{1: 'a', 2: 'b', 3: 'c'}" verweisen, oder wird das irgendwann gelöscht?
Code: Alles auswählen
DATA = None
def get_something():
return {1: 'a', 2: 'b', 3: 'c'}
def do_something():
global DATA
new_dict = get_something()
DATA = new_dict
do_something()
Re: Kleine Frage zu variablen Objekten
Verfasst: Montag 18. Oktober 2010, 16:35
von Dav1d
Globale variabeln sind nicht wirklich schön...
new_dict wird es nicht mehr "geben", new_dict ist nur in der Funktion bekann und eine lokale "Variable". Ich würde den Code so schreiben:
Code: Alles auswählen
def get_something():
return {1: 'a', 2: 'b', 3: 'c'}
def do_something():
new_dict = get_something()
# do something with new_dict
return new_dict
data = do_something()
Re: Kleine Frage zu variablen Objekten
Verfasst: Montag 18. Oktober 2010, 16:52
von cofi
Gremlin hat geschrieben:Wird "DATA" weiterhin permanent auf "{1: 'a', 2: 'b', 3: 'c'}" verweisen, oder wird das irgendwann gelöscht?
Solange der Name `DATA` existiert, kann das zugrundeliegende Objekt nicht geloescht werden (wenn doch ist es ein Bug).
Warum denkst du, dass es anders laufen sollte? Nur weil in `a = b = list()` das Ergebnis zuerst an `b` gebunden wird, ist `b` nicht priviligierter als `a`: Das sind alles nur Namen.
Re: Kleine Frage zu variablen Objekten
Verfasst: Montag 18. Oktober 2010, 17:32
von Gremlin
@Dav1d
Dass ich keinen Zugriff mehr auf "new_dict" hätte weiß ich, ich wollte auf das hinaus was cofi geschrieben hat. Aber danke für die Alternative
@cofi
Danke, genau das wars. Wie ich darauf komme? Kam mir halt vorhin so in den Sinn als ich eben jenes Konstrukt im Begriff war zu erstellen. Und bevor ich irgendwas vermute frag ich dann doch mal lieber nach

Re: Kleine Frage zu variablen Objekten
Verfasst: Montag 18. Oktober 2010, 23:26
von b.esser-wisser
cofi hat geschrieben:Nur weil in `a = b = list()` das Ergebnis zuerst an `b` gebunden wird, ist `b` nicht priviligierter als `a`: Das sind alles nur Namen.
Das stimmt doch so nicht, oder?
"d = d[0] = [42]" wäre doch da ein Gegenbeispiel? ( und bei "d[0] = d = [42]" wird d zu [42])
/klugscheiß,
Jörg
ps.: habe ich aber auch erst vor kurzem auf comp.lang.python gesehen.
Re: Kleine Frage zu variablen Objekten
Verfasst: Montag 18. Oktober 2010, 23:48
von BlackJack
@b.esser-wisser: Das `a` und `b` nur Namen sind stimmt schon. Du verwendest ja nicht einfach nur Zuweisungen an Namen sondern *veränderst* Objekte, denn da werden ja Methoden auf den Objekten aufgerufen -- `__setitem__()` nämlich. Bei Seiteneffekten kann die Reihenfolge natürlich eine Rolle spielen.
Re: Kleine Frage zu variablen Objekten
Verfasst: Dienstag 19. Oktober 2010, 14:50
von b.esser-wisser
@BlackJack:
Du hast recht, ich hätte das Zitat da etwas beschneiden sollen - ich wollte nur sagen, dass die Reihenfoleg anders ist.