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.