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}") # Փոփոխությունները տեսանելի են երկու պատճեններում