Ich bin sehr verwirrt durch das Verhalten unten. Die Fälle 1, 3 und 4 funktionieren wie erwartet, aber Fall 2 nicht. Warum erlaubt Fall 2 der Funktion, den Wert des Wörterbucheintrags global zu ändern, obwohl das Wörterbuch niemals von der Funktion zurückgegeben wird? Ein Hauptgrund, warum ich Funktionen verwende, besteht darin, alles in der Funktion vom Rest des Codes zu isolieren, aber dies scheint nicht möglich zu sein, wenn ich die gleichen Variablennamen innerhalb der Funktion verwende. Ich war der Auffassung, dass alles, was explizit in einer Funktion definiert ist, lokal für diese Funktion ist, aber dies scheint nicht der Fall zu sein, wenn das Wörterbuch definiert und als Eingabe an die Funktion übergeben wird.Python-Wörterbuch übergeben als eine Eingabe für eine Funktion wirkt wie ein globales in dieser Funktion anstelle einer lokalen
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
============= Fall 1 ===============
>>> def testfun1(a):
... a=2
...
>>> a=0
>>> testfun1(a)
>>> a
0
====== ======= Fall 2 ===============
>>> def testfun2(b):
... b['test']=2
...
>>> b={}
>>> testfun2(b)
>>> b
{'test': 2}
============= Fall 3 ==== ===========
>>> def testfun3():
... c=2
...
>>> c=0
>>> testfun3()
>>> c
0
============= Fall 4 =============== (von dieser Frage erklärt: Global dictionaries don't need keyword global to modify them?)
>>> def testfun4():
... d['test']=10
...
>>> d={}
>>> testfun4()
>>> d
{'test': 10}
Zum Kopieren eines Wörterbuchs sollte man die Methode decopy des Kopiermoduls verwenden ** copy.deepcopy (d) **, die eine tiefe Kopie von d zurückgibt. Weitere Informationen zu seichten vs decopy finden Sie unter https://docs.python.org/2/library/copy.html –
@PavanGupta Das kommt darauf an, wie tief 'eine Kopie Sie wollen. Wenn Sie ein Diktat haben, dessen Werte ebenfalls diktiert sind, möchten Sie Kopien dieser Diktate erstellen oder auf diese verweisen. Diese Regel/Frage gilt rekursiv. – Darthfett