Kopieren nach Python (Deep Copy und Shallow Copy)

| | | |

Manchmal ist eine Kopie erforderlich, damit Sie eine Kopie ändern können, ohne eine andere zu ändern. Python hat zwei Möglichkeiten, Kopien zu erstellen:

  • Deep copy
  • Shallow copy

Um diese Kopien zu erstellen, verwenden wir Kopieren Sie das Modul . Wir verwenden das Modul copy für flache und tiefe Kopiervorgänge. Zum Beispiel


# import copy module

import kopieren


# Liste 1 initialisieren

li1 = [ 1 , 2 , [ 3 , 5 ], 4 ]


# Kopie für flache Kopie verwenden

li2 = co py.copy ( li1)


# Deepcopy für Deepcopy verwenden

li3 = copy.deepcopy (li1)

Im obigen Code copy () gibt eine flache Kopie der Liste zurück, und deepcopy () gibt eine tiefe Kopie der Liste zurück.

deepcopy

Deep Copy — es ist ein Vorgang, bei dem der Kopiervorgang rekursiv abläuft. Das bedeutet, zuerst ein neues Sammlungsobjekt zu erstellen und es dann rekursiv mit Kopien der im Original gefundenen untergeordneten Objekte zu füllen. Bei einer tiefen Kopie wird eine Kopie eines Objekts auf ein anderes Objekt kopiert. Das bedeutet, dass alle Änderungen , die an der Kopie des Objekts vorgenommen wurden, nicht im Originalobjekt widergespiegelt werden. In Python geschieht dies mit der Funktion deepcopy () .


# Python-Code zur Demonstration von Kopiervorgängen


# import & quot; kopieren & quot; für Kopiervorgänge

import copy


# Liste 1 initialisieren

li1 = [ 1 , 2 , [ 3 , 5 ], 4 ]


# Verwendung von Deepcopy zum tiefen Kopieren

li2 = copy.deepcopy (li1)


# ursprüngliche Listenelemente

print ( "Die ursprünglichen Elemente vor dem tiefen Kopieren" )

für i in range ( 0 , len (li1)):

print (li1 [i], end = " " )

print ( " " )


# hinzufügen und zu neuer Liste hinzufügen

li2 [ 2 ] [ 0 ] = 7


# Die Änderung wird in l2 widergespiegelt

print ( "Die neue Liste der Elemente nach dem tiefen Kopieren " )

for i in Bereich ( 0 , len (li1)):

print (li2 [i], end = "" )


p rint ( "" )


# Änderung ist NICHT in der Originalliste widergespiegelt
# wie eine tiefe Kopie

print ( "Die ursprünglichen Elemente nach dem tiefen Kopieren" )

für i in Bereich ( 0 , len (li1)):

print (li1 [i], end = "" )

Exit:

Das ursprüngliche Element s vor dem tiefen Kopieren 1 2 [3, 5] 4 Die neue Liste der Elemente nach dem tiefen Kopieren 1 2 [7, 5] 4 Die ursprünglichen Elemente nach dem tiefen Kopieren 1 2 [3, 5] 4 

In Im obigen Beispiel wirkte sich eine an der Liste vorgenommene Änderung nicht auf andere Listen aus, was auf eine Deep-Copy-Liste hinweist.

Shallow copy

Flache Kopie bedeutet, ein neues Sammlungsobjekt zu erstellen und es dann mit Verweisen auf gefundene untergeordnete Objekte zu füllen im Original. Der Kopiervorgang wiederholt sich nicht und erstellt daher keine Kopien der untergeordneten Objekte selbst. Bei einer flachen Kopie wird ein Verweis auf ein Objekt auf ein anderes Objekt kopiert. Das bedeutet, dass alle Änderungen , die an der Kopie des Objekts vorgenommen werden , im Originalobjekt wiedergegeben werden . Python tut dies mit der Funktion "copy () ".


# Python-Code zur Demonstration von Kopiervorgängen


# importieren & quot; kopieren & quot; für Kopiervorgänge

import copy


# Liste 1 initialisieren

li1 = [ 1 , 2 , [ 3 , 5 ], 4 ]


# Kopie für flache Kopie verwenden

li2 = copy.copy (li1)


# ursprüngliche Listeneinträge

print ( " Die ursprünglichen Elemente vor dem flachen Kopieren " )

für i im Bereich ( 0 , len (li1)):

print (li1 [i], end = "" )


print ( "" )


# hinzufügen und zu neuer Liste hinzufügen

li2 [ 2 ] [ 0 ] = 7


# prüfen, ob die Änderung widergespiegelt wird

print ( "Die ursprünglichen Elemente nach dem flachen Kopieren" )

für i im Bereich ( 0 , len (li1 )):

print (li1 [i], end = " " )

Exit:

Die ursprünglichen Elemente vor dem flachen Kopieren 1 2 [3, 5] 4 Die ursprünglichen Elemente nach dem flachen Kopieren 1 2 [7, 5] 4 

Im obigen Beispiel ist die an der Liste vorgenommene Änderung wirkte sich auf eine andere Liste aus, was darauf hinweist, dass die Liste kopiert wurde.

Wichtige Punkte:
Der Unterschied zwischen flachen und tiefen Kopien gilt nur für zusammengesetzte Objekte (Objekte, die enthalten andere Objekte, wie Listen oder Klasseninstanzen):

  • Die flache Kopie erstellt ein neues zusammengesetztes Objekt und fügt dann (soweit möglich) Verweise auf Objekte ein, die im Original gefunden wurden.
  • Eine tiefe Kopie erstellt ein neues zusammengesetztes Objekt und fügt dann rekursiv Kopien der im Original gefundenen Objekte ein.

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method