Seite 1 von 1

Wert eines Objektes innerhalb einer Funktion verändern

Verfasst: Donnerstag 26. Januar 2017, 15:07
von Kniffte
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
>>>

Re: Wert eines Objektes innerhalb einer Funktion verändern

Verfasst: Donnerstag 26. Januar 2017, 15:21
von sebastian0202

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'}
>>>


Re: Wert eines Objektes innerhalb einer Funktion verändern

Verfasst: Donnerstag 26. Januar 2017, 15:39
von 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.

Re: Wert eines Objektes innerhalb einer Funktion verändern

Verfasst: Donnerstag 26. Januar 2017, 15:46
von Kniffte
Dank euch...nach euren Hinweisen ist der Groschen gefallen. :idea:

Re: Wert eines Objektes innerhalb einer Funktion verändern

Verfasst: Donnerstag 26. Januar 2017, 15:56
von sebastian0202
Aber mit dem Update sieht das viel professioneller aus als: dicto['key'] = wert