Junior — Middle
Mi a különbség a Pythonban az objektumok mélymásolása és felületes másolása között, és mikor kell használni őket?
sobes.tech MI
Válasz az MI-től
Pythonban a felületi másolat (shallow copy) új objektumot hoz létre, de a benne lévő beágyazott objektumokat nem másolja, csak hivatkozásként adja át. A mély másolat (deep copy) új objektumot hoz létre, és rekurzívan másolja az összes beágyazott objektumot, teljesen független struktúrát létrehozva.
Mikor használjuk:
- A felületi másolat akkor megfelelő, ha a beágyazott objektumok nem fognak változni, vagy ha a beágyazott objektumok változásai mindkét másolatban meg kell, hogy jelenjenek.
- A mély másolat akkor szükséges, ha teljesen független másolatot akarunk az objektumról az összes beágyazott elemmel, hogy a másolatban végzett változtatások ne befolyásolják az eredetit.
Példa:
import copy
original = [[1, 2], [3, 4]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)
shallow[0][0] = 100
print(original) # [[100, 2], [3, 4]] - az eredeti megváltozott
deep[1][1] = 200
print(original) # [[100, 2], [3, 4]] - az eredeti nem változott
Így a felületi és mély másolat közötti választás az másolat függetlenségi követelményeitől függ.