Articles

Python Shallow Copy and Deep Copy (Magyar)

Copy an Object in Python

in Python, we use= operator to create a copy of an object. Lehet, hogy úgy gondolja, hogy ez új objektumot hoz létre; nem. csak egy új változót hoz létre, amely megosztja az eredeti objektum hivatkozását.

Vegyünk egy példát, ahol létrehozunk egy old_list nevű listát, és átadunk egy objektumhivatkozást a new_list-nek a = operátor használatával.,

1. példa: Copy using = operator

amikor a program felett futunk, a kimenet a következő lesz:

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

mint látható a kimenetről mind a változók old_list, mind a new_list ugyanazt az azonosítót osztja i. e 140673303268168.

tehát, ha módosítani szeretné a new_list vagy az old_list értékeit, a változás mindkettőben látható.

lényegében előfordulhat, hogy az eredeti értékek változatlanok maradnak, csak az új értékeket módosítják, vagy fordítva., A Python-ban kétféle módon lehet másolatot készíteni:

  1. sekély másolat
  2. mély másolat

a másolás működéséhez a copy modult használjuk.

Copy Module

használjuk acopy modul Python sekély és mély másolási műveletek. Tegyük fel, hogy át kell másolnia az összetett listát, mondjuk x. például:

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

itt a copy() visszaadja az X sekély példányát. hasonlóképpen, deepcopy() visszaadja az X mély másolatát.,

Shallow Copy

egy sekély példány létrehoz egy új objektumot, amely tárolja az eredeti elemek hivatkozását.

tehát egy sekély példány nem hoz létre beágyazott objektumok másolatát, hanem csak átmásolja a beágyazott objektumok hivatkozását. Ez azt jelenti, hogy a másolási folyamat nem rekurzív vagy nem hoz létre másolatot a beágyazott objektumokról.,

2.példa: hozzon létre egy példányt sekély másolattal

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

a program futtatásakor a kimenet:

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

a fenti programban létrehoztunk egy beágyazott listát , majd sekély másolatot a copy() módszer.

Ez azt jelenti, hogy új, független objektumot hoz létre ugyanazzal a tartalommal. Ennek ellenőrzéséhez kinyomtatjuk mind a old_list, mind a new_list fájlt.,

annak megerősítéséhez, hogy a new_list eltér az old_list-től, Megpróbálunk új beágyazott objektumot hozzáadni az eredetihez és ellenőrizni.

példa 3: hozzátéve, hogy old_list, a sekély copy

amikor fut a program, akkor kimenet:

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

a fenti program, hoztunk létre egy sekély példányát old_list. A new_list hivatkozásokat tartalmaz az old_list-ben tárolt eredeti beágyazott objektumokra. Ezután hozzáadjuk az új listát, azaz a az old_list-be., Ez az új Albérlet nem másolt new_list.

azonban, ha megváltoztatja a beágyazott objektumok old_list, a változások megjelennek new_list.

4. Példa: új beágyazott objektum segítségével Sekély másolása

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

Amikor fut a program, kiírja, hogy:

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

Deep Copy

mély másolat létrehoz egy új objektumot, majd rekurzívan hozzáadja a másolatot beágyazott objektumok jelen az eredeti elemekkel.

folytassuk a 2. példával., Deep copy-t fogunk létrehozni a deepcopy() függvény segítségével, amely a copy modulban található. A deep copy az eredeti objektum és az összes beágyazott objektum független másolatát hozza létre.

5.példa: a lista másolása deepcopy ()

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

amikor futtatjuk a programot, akkor kimenet:

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

a fenti programban a deepcopy() függvényt használjuk a hasonló példány létrehozásához.,

Ha azonban módosítja a beágyazott objektumokat az eredeti objektum old_list alkalmazásban, akkor a new_list másolása nem változik.

6. példa: új beágyazott objektum hozzáadása a listához a Deep copy

használatával a program futtatásakor a kimenet:

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

a fenti programban, amikor új értéket rendelünk az old_list-hez, csak a old_list módosul. Ez azt jelenti, hogy mind a old_list, mind a new_list független. Ennek oka az, hogy az old_list rekurzívan másolt, ami igaz az összes beágyazott objektumra.