Sobes.tech
Junior

Ի՞նչ է մակերեսային պատճենը։

sobes.tech AI

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

Հարթ պատճենը (shallow copy) ստեղծում է նոր բարդ օբյեկտ, բայց չի ստեղծում ներսում գտնվող օբյեկտների պատճենները: Փոխարենը, պատճենվում են հղումները դեպի ներսում գտնվող օբյեկտները՝ բնօրինակի:

Հիմնական կետեր՝

  • Ստեղծում է նոր հավաքածու (ցանկ, բառարան, հավաքածու):
  • Նոր հավաքածուի տարրերը հղումներ են նույն օբյեկտներին, ինչ բնօրինակի տարրերը:
  • Փոփոխությունները ներսում գտնվող օբյեկտներում մեկ պատճենում կտեսնվեն մյուսում:
  • Փոփոխությունները հավաքածուի ինքնին (հավելում/ջնջում) մեկ պատճենում չեն ազդի մյուսի վրա:

Իմպլեմենտացիաներ՝

  • .copy() մեթոդը ցանկերի, բառարանների, հավաքածուների համար:
  • copy.copy() ֆունկցիան copy մոդուլից:
  • Կտրում [:] ցանկերի համար:
# Օրինակ ցանկով
original_list = [[1, 2], 3]
shallow_copy_list = original_list.copy()

print(f"Ազատ: {original_list}")
print(f"Հարթ պատճեն: {shallow_copy_list}")
print(f"Ներքին ցանկերի նույնականության հղումները՝ {original_list[0] is shallow_copy_list[0]}") # True - հղումները նույնն են

original_list[0][0] = 99 # Ներքին ցանկը փոխում ենք

print(f"Հետո փոփոխության՝ {original_list}")
print(f"Հարթ պատճենը՝ փոփոխությունից հետո՝ {shallow_copy_list}") # Փոփոխությունը տեսանելի է երկու պատճեններում

original_list.append(4) # Փոխում ենք հավաքածուին ինքնին

print(f"Ավելացումից հետո՝ {original_list}")
print(f"Հարթ պատճենը՝ ավելացումից հետո՝ {shallow_copy_list}") # Միայն բնօրինակում
# Օրինակ copy.copy()
import copy

original_dict = {'a': [1, 2], 'b': 3}
shallow_copy_dict = copy.copy(original_dict)

print(f"Ազատ: {original_dict}")
print(f"Հարթ պատճեն: {shallow_copy_dict}")
print(f"Ներքին ցանկերի նույնականության հղումները՝ {original_dict['a'] is shallow_copy_dict['a']}") # True

original_dict['a'][0] = 99 # Ներքին ցանկը փոխում ենք

print(f"Հետո փոփոխության՝ {original_dict}")
print(f"Հարթ պատճենը՝ փոփոխությունից հետո՝ {shallow_copy_dict}") # Փոփոխությունները տեսանելի են երկու պատճեններում