logo

копіювати в Python (глибоке копіювання та неглибоке копіювання)

в 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?

Глибока копія створює новий складений об’єкт перед рекурсивним вставленням копій елементів, знайдених в оригіналі. Це означає спочатку створення нового об’єкта колекції, а потім рекурсивне заповнення його копіями дочірніх об’єктів, знайдених в оригіналі. У разі глибокого копіювання копія об’єкта копіюється в інший об’єкт. Це означає, що будь-які зміни зроблено на копію об'єкта не відображаються в оригінальному об’єкті.

Глибока копія в 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 це реалізовано за допомогою копіювати() функція.

Неглибока копія в 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 копією класу