Sobes.tech
Junior — Middle

Milline on sügava ja pindmise koopiate vahe Pythonis ning millal seda tuleks kasutada?

sobes.tech AI

Vastus AI-lt

Pythonis loob ** pindalise koopiat** (shallow copy), mis loob uue objekti, kuid selle sees olevad sisemised objektid ei kopeerita, vaid viidatakse neile. Sügav koopiat (deep copy) loob uue objekti ja kopeerib rekursiivselt kõik sisemised objektid, luues täielikult sõltumatu struktuuri.

Millal kasutada:

  • Pindlik koopiat sobib, kui sisemised objektid ei muutu või kui muudatused sisemistes objektides peavad kajastuma mõlemas koopias.
  • Sügav koopiat on vajalik, kui on vaja täielikult sõltumatut koopiat objekti ja selle kõigi sisemiste elementidega, et muudatused koopias ei mõjutaks algset.

Näide:

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]] - algne muutus

deep[1][1] = 200
print(original)  # [[100, 2], [3, 4]] - algne muutus

Seega, valik pindmise ja sügava koopiate vahel sõltub koopiate sõltumatuse nõuetest.