в Python , Інструкції присвоєння не копіюють об’єкти, вони створюють зв’язки між метою та об’єктом. Коли ми використовуємо = Він лише створює нову змінну, яка ділиться посиланням на оригінальний об’єкт. Щоб створити реальні копії або клони цих об’єктів, ми можемо використовувати модуль копіювання в Python .
Синтаксис Python Deepcopy
Синтаксис: copy.deepcopy(x)
Синтаксис Python Shallowcopy
Синтаксис: copy.copy(x)
приклад:
Щоб зробити ці копії, ми використовуємо модуль копіювання. Копія() повертає поверхневу копію списку, а deepcopy() повертає глибоку копію списку. Як бачите, обидва мають однакове значення, але різні ідентифікатори.
приклад: Цей код демонструє використанняcopy>модуль для створення як поверхневих, так і глибоких копій вкладеного спискуli1>. Дрібна копія,li2>, створюється за допомогою copy.copy()> , зі збереженням структури верхнього рівня, але спільним використанням посилань на внутрішні списки. Глибока копія,li3>, створюється за допомогою copy.deepcopy()> , в результаті чого вийшла повністю незалежна копіяli1>, включаючи всі вкладені елементи. Код друкує ідентифікатори та значенняli2>іli3>, підкреслюючи різницю між поверхневими та глибокими копіями з точки зору посилання та незалежності.
Python3
import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.copy(li1)> print>(>'li2 ID: '>,>id>(li2),>'Value: '>, li2)> li3>=> copy.deepcopy(li1)> print>(>'li3 ID: '>,>id>(li3),>'Value: '>, li3)> |
>
>
Вихід:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Що таке глибока копія в Python?
Глибока копія створює новий складений об’єкт перед рекурсивним вставленням копій елементів, знайдених в оригіналі. Це означає спочатку створення нового об’єкта колекції, а потім рекурсивне заповнення його копіями дочірніх об’єктів, знайдених в оригіналі. У разі глибокого копіювання копія об’єкта копіюється в інший об’єкт. Це означає, що будь-які зміни зроблено на копію об'єкта не відображаються в оригінальному об’єкті.
приклад:
У наведеному вище прикладі зміна внесена в список не вплинуло інші списки, вказуючи на те, що список глибоко скопійований.
Цей код ілюструє глибоке копіювання списку з вкладеними елементами за допомогоюcopy>модуль. Спочатку він друкує оригінальні елементиli1>, потім глибоко копіює їх для створенняli2>. Модифікація елемента вli2>не впливаєli1>, як показано на окремих роздруківках. Це підкреслює, як глибоке копіювання створює незалежну копію, зберігаючи вміст оригінального списку навіть після внесення змін до копії.
int до char java
Python3
import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.deepcopy(li1)> print> (>'The original elements before deep copying'>)> for> i>in> range>(>0>,>len>(li1)):> >print> (li1[i],end>=>' '>)> print>(>'
'>)> li2[>2>][>0>]>=> 7> print> (>'The new list of elements after deep copying '>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li2[i],end>=>' '>)> print>(>'
'>)> print> (>'The original elements after deep copying'>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li1[i],end>=>' '>)> |
>
>
Вихід:
The original elements before deep copying 1 2 [3, 5] 4 The new list of elements after deep copying 1 2 [7, 5] 4 The original elements after deep copying 1 2 [3, 5] 4>
Що таке дрібна копія в Python?
Неглибока копія створює новий складений об’єкт, а потім посилається на об’єкти, що містяться в оригіналі в ньому, що означає, що вона створює новий об’єкт колекції, а потім заповнює його посиланнями на дочірні об’єкти, знайдені в оригіналі. Процес копіювання не рекурсивний і тому не створює копій самих дочірніх об’єктів. У випадку мілкого копіювання посилання на об’єкт копіюється в інший об’єкт. Це означає, що будь-які зміни створено для копії об’єкта відображати в оригінальному об'єкті. У Python це реалізовано за допомогою копіювати() функція.
приклад:
У цьому прикладі зміна внесена в список вплинуло інший список, що вказує на те, що список скопійовано поверхнево. Важливі моменти: Різниця між поверхневим і глибоким копіюванням актуальна лише для складених об’єктів (об’єктів, які містять інші об’єкти, наприклад списки чи екземпляри класу):
- Неглибока копія створює новий складений об’єкт, а потім (наскільки це можливо) вставляє в нього посилання на об’єкти, знайдені в оригіналі.
- Глибока копія створює новий складений об’єкт, а потім рекурсивно вставляє в нього копії об’єктів, знайдених в оригіналі.
приклад: Цей код демонструє неглибоке копіювання списку з вкладеними елементами за допомогою ' copy'> модуль. Спочатку він друкує оригінальні елементиli1>, потім виконує неглибоке копіювання вli2>. Зміна елемента вli2>впливає на відповідний елемент вli1,>оскільки обидва списки мають спільні посилання на внутрішні списки. Це ілюструє, що поверхневе копіювання створює новий список, але воно не забезпечує повної незалежності для вкладених елементів.
Python3
файл json
import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.copy(li1)> print> (>'The original elements before shallow copying'>)> for> i>in> range>(>0>,>len>(li1)):> >print> (li1[i],end>=>' '>)> print>(>'
'>)> li2[>2>][>0>]>=> 7> print> (>'The original elements after shallow copying'>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li1[i],end>=>' '>)> |
>
>
Вихід:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
РЕКОМЕНДОВАНІ СТАТТІ – Різниця між Shallow і Deep копією класу