In python, die Rückgabe ein Objekt in einer Funktion Körper macht eine Tiefe Kopie?

Werde ich versuchen zu klären:

Zum Beispiel, ich mache eine Funktion, die lokal erstellt eine Liste und gibt es zurück. Wie funktioniert Python-erstellen der zurückgegebenen Liste, die sich außerhalb der Funktion Körper ? Ist es verwenden, "deepcopy" (oder so ähnlich) ?

In [50]: def create_list():
    ...:     sublist1 = [1,2,3]
    ...:     sublist2 = [4,5,6]
    ...:     list_of_lists=[sublist1,sublist1,sublist2]
    ...:     return list_of_lists
    ...: 

In [51]: l=create_list()

In [52]: l
Out[52]: [[1, 2, 3], [1, 2, 3], [4, 5, 6]]

In [53]: l[0].append(4)

In [54]: l
Out[54]: [[1, 2, 3, 4], [1, 2, 3, 4], [4, 5, 6]]

Hier der zurückgegebenen Liste l enthält noch die Teillisten. Und l[0] und l[1] noch verweisen auf das gleiche Unterverzeichnis (das ist das normale Python-Verhalten). Also die Liste und deren Struktur kopiert wurden.

Und wenn ich den Anruf mal wieder create_list() :

In [55]: l2=create_list()

In [56]: l2
Out[56]: [[1, 2, 3], [1, 2, 3], [4, 5, 6]]

In [57]: l
Out[57]: [[1, 2, 3, 4], [1, 2, 3, 4], [4, 5, 6]]

Einer neuen Liste l2 erstellt wurde, aber l ist unberührt, das heißt, es existiert außerhalb der Funktion, und seine unterlisten sind seine eigenen, keine Verweise auf Teillisten, die noch vorhanden sind in der Funktion Körper.

Also meine Frage : funktioniert die Python verwendet deepcopy oder etwas ähnliches zu machen l ?
Egal, welche Art von Objekt kehre ich mit einer Funktion, wird es unberührt von späteren Aufruf dieser Funktion ?
(so lange, wie das Objekt erstellt wurde lokal in der Funktion)

Zögern Sie nicht, mir zu sagen, wenn ich mich nicht klar genug ausgedrückt.
Danke,

  • Nein, aber python macht neue Objekte erstellen jedes mal, wenn Sie eine Funktion auszuführen, bar passieren Sie einen änderbaren Standard-arg.
InformationsquelleAutor Yann | 2015-04-19
Schreibe einen Kommentar