Sobes.tech
Junior — Middle

Kāda ir atšķirība starp dziļo un virspusējo objektu kopēšanu Python, un kad to būtu jālieto?

sobes.tech AI

Atbilde no AI

Pythonā, virspusēja kopija (shallow copy) izveido jaunu objektu, bet iekšējie objekti tajā netiek kopēti, tikai tiek norādīti uz tiem. Dziļa kopija (deep copy) izveido jaunu objektu un rekursīvi kopē visus iekšējos objektus, radot pilnīgi neatkarīgu struktūru.

Kad izmantot:

  • Virspusēja kopija ir piemērota, ja iekšējie objekti nemainīsies vai ja izmaiņas iekšējos objektos jāatspoguļojas abās kopijās.
  • Dziļa kopija ir nepieciešama, ja nepieciešama pilnīgi neatkarīga objekta kopija ar visiem iekšējiem elementiem, lai izmaiņas kopijā neietekmētu oriģinālu.

Piemērs:

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]] - oriģināls mainījās

deep[1][1] = 200
print(original)  # [[100, 2], [3, 4]] - oriģināls nemainījās

Tādējādi, izvēle starp virspusēju un dziļu kopiju ir atkarīga no kopijas neatkarības prasībām.