Sobes.tech
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.