Wert eines Objektes innerhalb einer Funktion verändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kniffte
User
Beiträge: 64
Registriert: Dienstag 27. September 2016, 11:05

Hallo Zusammen,

Steh grad auf dem Schlauch und bekomm den Fuß nicht hoch. :K

Könnte mir bitte jmd. erklären wieso im Folgenden a nicht verändert werden kann?
Also nach Ausführen der Funktion fill(a), a immernoch ein leeres Dictionary ist?

Code: Alles auswählen


Python 3.4.5 |Continuum Analytics, Inc.| (default, Jul  5 2016, 14:53:07) [MSC v.1600 64 bit (AMD64)
] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = {}
>>> def fill(recipient):
...     recipient = {'test':1}
...
>>> a
{}
>>> fill(a)
>>> a
{}
>>> def fill2(recipient):
...     recipient = 1
...
>>> a
{}
>>> fill2(a)
>>> a
{}
>>> def fill3(recipient):
...     print(id(recipient))
...
>>> id(a)
34636936
>>> fill3(a)
34636936
>>>
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Code: Alles auswählen

a = {}
print id(a)
def fill(recipient):
    print id(recipient)
    recipient.update({ 'test': 'x'})
    print id(recipient)
    recipient = {'test': 1}
    print id(recipient)

fill(a)
print a

Ergebnis: 
>>> a = {}
>>> print id(a)
7644160
>>> def fill(recipient):
...     print id(recipient)
...     recipient.update({ 'test': 'x'})
...     print id(recipient)
...     recipient = {'test': 1}
...     print id(recipient)
...
>>> fill(a)
7644160
7644160
6998160
>>> print a
{'test': 'x'}
>>>

BlackJack

@Kniffte: Weil Du innerhalb keiner der Funktionen das machst was im Betreff steht: Das Objekt verändern. Dem lokalen Namen ein *anderes* Objekt zuzuweisen ändert nichts an dem Objekt was vorher mal an diesen Namen gebunden war.

@sebastian0202: Der `update()`-Aufruf ist unsinnig. Man verwendet `update()` nicht um *einem* Schlüssel einen (neuen) Wert zuzuweisen.
Kniffte
User
Beiträge: 64
Registriert: Dienstag 27. September 2016, 11:05

Dank euch...nach euren Hinweisen ist der Groschen gefallen. :idea:
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Aber mit dem Update sieht das viel professioneller aus als: dicto['key'] = wert
Antworten