logo

còpia en Python (còpia profunda i còpia superficial)

En Python , Les declaracions d'assignació no copien objectes, sinó que creen enllaços entre un objectiu i un objecte. Quan fem servir el = operador, només crea una variable nova que comparteix la referència de l'objecte original. Per tal de crear còpies reals o clons d'aquests objectes, podem utilitzar el mòdul de còpia a Python .

Sintaxi de Python Deepcopy

Sintaxi: copy.deepcopy(x)



Sintaxi de Python Shallowcopy

Sintaxi: copy.copy(x)

Exemple:

Per fer aquestes còpies, utilitzem el mòdul de còpia. El copy() retorna una còpia superficial de la llista, i deepcopy() retorna una còpia profunda de la llista. Com podeu veure, tots dos tenen el mateix valor però tenen identificacions diferents.

Exemple: Aquest codi mostra l'ús delcopy>mòdul per crear còpies tant superficials com profundes d'una llista imbricadali1>. Una còpia poc profunda,li2>, es crea utilitzant copy.copy()> , conservant l'estructura de nivell superior però compartint referències a les llistes internes. Una còpia profunda,li3>, es crea utilitzant copy.deepcopy()> , resultant en una còpia completament independent deli1>, inclosos tots els elements imbricats. El codi imprimeix els ID i els valors deli2>ili3>, destacant la distinció entre còpies superficials i profundes en termes de referència i independència.



Python 3






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)>

>

>

Sortida:

  li2 ID:   2521878674624   Value:   [1, 2, [3, 5], 4]   li3 ID:   2521878676160   Value:   [1, 2, [3, 5], 4]>

Què és la còpia profunda a Python?

Una còpia profunda crea un nou objecte compost abans d'inserir-hi còpies dels elements que es troben a l'original de manera recursiva. Significa primer construir un nou objecte de col·lecció i després omplir-lo recursivament amb còpies dels objectes fills que es troben a l'original. En el cas de la còpia profunda, una còpia de l'objecte es copia en un altre objecte. Vol dir això qualsevol canvi fet a una còpia de l'objecte no reflecteix en l'objecte original.

Còpia profunda en Python

Exemple:

A l'exemple anterior, el canvi fet a la llista no va afectar altres llistes, indicant que la llista està copiada profundament.

Aquest codi il·lustra la còpia profunda d'una llista amb elements imbricats mitjançant l'copy>mòdul. Inicialment imprimeix els elements originals deli1>, després els copia en profunditat per crear-losli2>. Una modificació d'un element enli2>no afectali1>, tal com demostren les impressions separades. Això destaca com la còpia profunda crea una còpia independent, conservant el contingut de la llista original fins i tot després dels canvis a la còpia.

tutorial de swing de java

Python 3




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>=>' '>)>

>

>

Sortida:

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>

Què és la còpia superficial a Python?

Una còpia superficial crea un nou objecte compost i després fa referència als objectes continguts a l'original dins d'ell, el que significa que construeix un nou objecte de col·lecció i després l'omple amb referències als objectes secundaris que es troben a l'original. El procés de còpia no es repeteix i, per tant, no crearà còpies dels objectes fills. En el cas de la còpia superficial, una referència d'un objecte es copia en un altre objecte. Vol dir això qualsevol canvi fet a una còpia d'un objecte reflexionar en l'objecte original. A Python, això s'implementa amb el fitxer copiar () funció.

Còpia poc profunda en Python

Exemple:

En aquest exemple, el canvi fet a la llista va afectar una altra llista, que indica que la llista s'ha copiat superficialment. Punts importants: La diferència entre la còpia superficial i la còpia profunda només és rellevant per als objectes compostos (objectes que contenen altres objectes, com ara llistes o instàncies de classe):

  • Una còpia poc profunda construeix un nou objecte compost i després (en la mesura del possible) hi insereix referències als objectes que es troben a l'original.
  • Una còpia profunda construeix un nou objecte compost i després, de manera recursiva, hi insereix còpies dels objectes trobats a l'original.

Exemple: Aquest codi demostra la còpia superficial d'una llista amb elements imbricats mitjançant el copy'> mòdul. Inicialment, imprimeix els elements originals deli1>, després realitza una còpia superficial ali2>. Modificació d'un element enli2>afecta l'element corresponent ali1,>ja que ambdues llistes comparteixen referències a les llistes internes. Això il·lustra que la còpia superficial crea una llista nova, però no proporciona una independència completa per als elements imbricats.

Python 3

diana mary blacker




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>=>' '>)>

>

>

Sortida:

The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>

ARTICLES RECOMANATS Diferència entre la còpia superficial i profunda d'una classe