Articles

Python Overfladisk Kopi og Dyb Kopi


Kopiere et Object ind i Python

I Python, vi bruger = operatør for at oprette en kopi af et objekt. Du tror måske, at dette skaber et nyt objekt; det gør det ikke. det skaber kun en ny variabel, der deler referencen til det originale objekt.

Lad os tage et eksempel, hvor vi opretter en liste med navnet old_list og passerer et objekt reference til new_list ved hjælp af = operatør.,

Eksempel 1: Kopiering ved hjælp af = operator

Når vi kører ovenstående program, vil output være:

Old List: , , ]ID of Old List: 140673303268168New List: , , ]ID of New List: 140673303268168

Som du kan se fra output begge variabler old_list og new_list deler samme id jeg.e 140673303268168.

så hvis du vil ændre nogen værdier i ne ._list eller old_list, er ændringen synlig i begge.

i det væsentlige vil du måske have de oprindelige værdier uændrede og kun ændre de nye værdier eller omvendt., I Python er der to måder at oprette kopier på:

  1. Shallo.Copy
  2. Deep Copy

for at få disse kopier til at fungere, bruger vi copy modul.

Copy Module

Vi brugercopy modul af Python til lavvandede og dybe kopieringsoperationer. Antag, at du har brug for at kopiere den sammensatte liste sige x. For eksempel:

import copycopy.copy(x)copy.deepcopy(x)

Her copy() returnere en overfladisk kopi af x. Tilsvarende deepcopy() returnere en dyb kopi af x.,

Shallo.Copy

en shallo. copy opretter et nyt objekt, der gemmer referencen til de originale elementer.

så en lav kopi opretter ikke en kopi af indlejrede objekter, i stedet kopierer den bare referencen til indlejrede objekter. Det betyder, at en kopi proces ikke recurse eller oprette kopier af indlejrede objekter selv.,

Eksempel 2: Oprette en kopi ved hjælp af overfladisk kopi

import copyold_list = , , ]new_list = copy.copy(old_list)print("Old list:", old_list)print("New list:", new_list)

Når vi kører programmet , vil output være:

Old list: , , ]New list: , , ]

I ovenstående program, vi har skabt en indlejret liste og derefter overfladisk kopi det ved hjælp af copy() metode.

dette betyder, at det vil skabe nye og uafhængige objekt med samme indhold. For at bekræfte dette udskriver vi både old_list og Ne ._list.,

for at bekræfte, At new_list er forskellige fra old_list, vi forsøger at tilføje nye indlejrede objekt til originale og kontrollere det.

Eksempel 3: Tilføjelse til old_list, ved hjælp af overfladisk kopi

Når vi kører programmet, vil det output:

Old list: , , , ]New list: , , ]

I ovenstående program, vi har skabt en overfladisk kopi af old_list. Ne ._list indeholder henvisninger til originale indlejrede objekter gemt i old_list. Derefter tilføjer vi den nye liste, dvs. til old_list., Denne nye underliste blev ikke kopieret i ne ._list.når du ændrer indlejrede objekter i old_list, vises ændringerne dog i ne ._list.

Eksempel 4: Tilføjelse af nye indlejrede objekt ved hjælp af Overfladisk kopi

import copyold_list = , , ]new_list = copy.copy(old_list)old_list = 'AA'print("Old list:", old_list)print("New list:", new_list)

Når vi kører programmet, vil det output:

Old list: , , ]New list: , , ]

Dyb Kopi

En dyb kopi opretter et nyt objekt og rekursivt tilføjer kopier af indlejrede objekter til stede i den oprindelige elementer.

lad os fortsætte med eksempel 2., Vi vil dog oprette dyb kopi ved hjælp af deepcopy() funktion til stede i copy modul. Den dybe kopi skaber uafhængig kopi af originale objekt og alle dens indlejrede objekter.

Eksempel 5: Kopiering på en liste ved hjælp deepcopy()

import copyold_list = , , ]new_list = copy.deepcopy(old_list)print("Old list:", old_list)print("New list:", new_list)

Når vi kører programmet, vil det output:

Old list: , , ]New list: , , ]

I ovenstående program, vi bruger deepcopy() funktion til at oprette en kopi, der ligner.,

men hvis du foretager ændringer i indlejrede objekter i original object old_list, vil du ikke se nogen ændringer i kopier ne ._list.

Eksempel 6: Tilføjelse af et nyt indlejrede objekt i listen ved hjælp af Dyb kopi

Når vi kører programmet, vil det output:

Old list: , , ]New list: , , ]

I ovenstående program, når vi tildeler en ny værdi til old_list, vi kan kun se old_list er ændret. Det betyder, at både old_list og Ne ._list er uafhængige. Dette skyldes, at old_list blev rekursivt kopieret, hvilket er sandt for alle dens indlejrede objekter.