Sobes.tech
Junior — Middle

Ի՞նչն է տարբերությունը Python-ում օբյեկտների խորքային և մակերեսային պատճենների միջև, և երբ պետք է օգտագործել այն։

sobes.tech AI

Պատասխան AI-ից

Python-ում, հպանցիկ պատճեն (shallow copy) ստեղծում է նոր օբյեկտ, բայց ներսի օբյեկտները ներսում չեն պատճենվում, միայն հղում են։ Խորքային պատճեն (deep copy) ստեղծում է նոր օբյեկտ և ռեկուրսիվ կերպով պատճենում բոլոր ներսի օբյեկտները, ստեղծելով լիովին անկախ կառուցվածք։

Երբ օգտագործել:

  • Հպանցիկ պատճեն հարմար է, եթե ներսի օբյեկտները չեն փոխվի կամ եթե փոփոխությունները ներսի օբյեկտներում պետք է արտացոլվեն երկու պատճեններում։
  • Խորքային պատճեն անհրաժեշտ է, երբ պահանջվում է լիովին անկախ պատճեն օբյեկտից և նրա բոլոր ներսի տարրերով, որպեսզի փոփոխությունները պատճենում չազդեն սկզբնաղբյուրի վրա։

Օրինակ՝

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]] - սկզբնաղբյուրն փոխվեց

deep[1][1] = 200
print(original)  # [[100, 2], [3, 4]] - սկզբնաղբյուրն չփոխվեց

Ընտրությունը՝ հպանցիկ և խորքային պատճենների միջև, կախված է պատճենման անկախության պահանջներից։