Sobes.tech
Junior — Middle

Magyarázza el, mi az a felszíni másolás Pythonban, és miben különbözik a mély másolástól.

sobes.tech MI

Válasz az MI-től

A felületes másolat (shallow copy) Pythonban új objektumot hoz létre, de a benne lévő beágyazott objektumokat nem másolja, csak rájuk mutató hivatkozásokat másol. Vagyis, ha az objektumon belül módosítható beágyazott struktúrák (pl. listák, szótárak) vannak, azok megosztottak lesznek az eredeti és a másolat között.

A mélymásolat (deep copy) új objektumot hoz létre, és rekurzívan másolja az összes beágyazott objektumot, teljesen független másolatot létrehozva.

Példa:

import copy

original = [1, [2, 3]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)

shallow[1].append(4)
print(original)  # Kiírja: [1, [2, 3, 4]] — a beágyazott lista megváltozott az eredetinél is
print(deep)      # Kiírja: [1, [2, 3]] — a mélymásolat nem változott

Ezért a felületes másolat akkor megfelelő, ha a beágyazott objektumok nem változnak, a mélymásolat pedig akkor, ha a másolat teljes függetlensége szükséges az eredetitől.