Das erste, was festgestellt werden muss, ist, dass es in Python kein Argument dafür gibt, Parameter nach Wert zu übergeben, wie in C und C. Alles in Python ist ein Objekt, und das ist auch seine Stärke. Es gibt keine Grundtypen.
In Python gehören Typen zu Objekten und Variablen haben keinen Typ. Dies ist die Sprachfunktion von Python und was viele Pythoner anzieht. Alle Variablen können als „Referenz“ auf ein Objekt im Speicher verstanden werden oder in C auch wie void* aussehen. Daher hoffe ich, dass Sie, wenn Sie eine Python-Variable sehen, die Variable vom realen Speicherobjekt trennen können.
Typen gehören zu Objekten, nicht zu Variablen. Auf diese Weise wird es einfacher, über viele Themen nachzudenken.
Objekte in Python können in eine oder zwei Hauptkategorien unterteilt werden: veränderlich und unveränderlich.
Zu den Objekten der unveränderlichen Klasse gehören hauptsächlich Zeichenfolgen und Tupel, Zahlen und andere Objekte wie Listen und Wörterbücher sind Objekte der Mutale-Klasse.
Da in Python alles ein Objekt ist, werden die Funktionsparameter in Python alle als Verweise übergeben (was als Zeiger verstanden werden kann). Apropos: Ich glaube, jeder ist bereits mit der Methode der Parameterübergabe per Referenz vertraut.
Ergänzung: Ich habe den obigen Inhalt nur sorgfältig gelesen, da einige Anfänger ihn möglicherweise nicht allein aufgrund des folgenden Falls verstehen, daher werde ich hier zwei weitere persönliche Schlussfolgerungen ziehen.
Da Funktionen per Referenz übergeben werden, besteht die Möglichkeit, dass ich einen Parameter arg übergebe, aber ich möchte nicht, dass der Parameter arg innerhalb der Funktion geändert wird und sich auf die Variablen außerhalb der Funktion auswirkt Wenn Sie diesen Effekt erzielen möchten, denken Sie darüber nach, Variablen in andere Sprachen zu kopieren, oder? Aber so etwas wie eine Kopie gibt es in Python nicht, aber es gibt einen Objekttyp an (unveränderliches Objekt, persönliche Einschätzung, dieser Objekttyp wird wahrscheinlich aus diesem Grund erstellt, haha). Nun gehen wir davon aus, dass ein unveränderliches Variablenobjekt imvar an die Funktion übergeben wird und imvar innerhalb der Funktion geändert wird. Wenn es sich um ein unveränderliches Objekt handelt, erstellt der Compiler zunächst ein Kopierobjekt dafür und ändert es dann. Was also in der Funktion geändert wird, ist tatsächlich nicht das ursprüngliche Objekt imvar, sodass sein Wert immer noch der Wert vor Eintritt in die Funktionsverarbeitung ist. Im Gegenteil, wenn eine Variable vom Typ Variable übergeben wird, wird sie direkt in der Referenz geändert, sodass dasselbe Objekt innerhalb und außerhalb der Funktion bedient wird, sodass sich die Operation innerhalb der Funktion direkt auf den Wert derselben Variablen außerhalb der Funktion auswirkt . Ich weiß nicht, ob es jetzt einfacher zu verstehen ist. Wenn Sie es immer noch nicht verstehen, sollten Sie es verstehen, indem Sie die folgenden Beispiele kombinieren.
Ein Testfall ist direkt unten angegeben:
#test num=10 string='test' tupleset=(1,2,3) listset=[9,8,7] def change(num,string,tupleset,listset): num+=1 string+=' into new words!' #tupleset.add(12) error tupleset=(12,3,4,4) listset.append(10000) change(num,string,tupleset,listset) print num,string,tupleset,listset ------------------------------------------------ ans:10 test (1, 2, 3) [9, 8, 7, 10000]
Verstehen Sie?