Sobes.tech
Junior — Middle

Paaiškinkite, kas yra paviršutiniškas objektų kopijavimas Python'e ir kaip jis skiriasi nuo giluminio kopijavimo.

sobes.tech AI

Atsakymas iš AI

Paviršinis kopijavimas (shallow copy) Python'e sukuria naują objektą, tačiau vidiniai objektai jame nėra kopijuojami, tik kopijuojamos nuorodos į juos. Tai reiškia, kad jei objekte yra modifikuojamos vidinės struktūros (pvz., sąrašai, žodynai), jos bus bendros tarp originalo ir kopijos.

Gili kopija (deep copy) sukuria naują objektą ir rekursyviai kopijuoja visus vidinius objektus, sukurdama visiškai nepriklausomą kopiją.

Pavyzdys:

import copy

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

shallow[1].append(4)
print(original)  # Išves: [1, [2, 3, 4]] — vidinis sąrašas pasikeitė ir originalo
print(deep)      # Išves: [1, [2, 3]] — gilus kopijavimas nepasikeitė

Todėl paviršinis kopijavimas yra tinkamas, kai vidiniai objektai nepasikeičia, o gilus — kai reikalinga visiška kopijos nepriklausomybė nuo originalo.