Ejemplo para distinguir entre copia superficial y copia profunda en Python
Ejemplo para distinguir entre copia superficial y copia profunda en Python
Este artículo presenta principalmente ejemplos para distinguir entre copia superficial y copia profunda en Python, que es un conocimiento importante para el aprendizaje introductorio de Los amigos de Python que lo necesiten pueden consultar el módulo de copia para operaciones de copia de objetos. Este módulo es muy simple y solo proporciona dos métodos principales: copy.copy y copy.deepcopy, que representan copia superficial y copia profunda respectivamente. ¿Qué es la copia superficial y qué es la copia profunda? Hay muchísima información en Internet, por lo que no entraré en detalles aquí. La operación de copia sólo funciona en objetos compuestos. Utilice ejemplos sencillos para presentar estos dos métodos respectivamente.
La copia superficial solo copia el objeto en sí y no copia los objetos a los que hace referencia el objeto.
#coding=gbk
importar copia
l1 = [1, 2, [3, 4]]
l2 = copiar .copiar(l1)
imprimir l1
imprimir l2
l2[2][0] = 50
imprimir l1 p>
imprimir l2
#---- Resultado----
[1, 2, [3, 4]]
[ 1, 2, [3, 4]]
[1, 2, [50, 4]]
[1, 2, [50, 4]]
El mismo código, utilizando copia profunda, tendrá resultados diferentes:
importar copia
l1 = [1, 2, [3, 4]]
l2 = copiar.deepcopy(l1)
imprimir l1
imprimir l2
l2[2][0] = 50
imprimir l1
imprimir l2
#---- Resultado----
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4] ]
Cambiar el comportamiento predeterminado de copia
Al definir una clase, puede cambiar el comportamiento predeterminado de copia definiendo los métodos __copy__ y __deepcopy__. Aquí hay un ejemplo simple:
clase CopyObj(objeto):
def __repr__(self):
return "CopyObj"
def __copy__(self):
return "Hola"
obj = CopyObj()
obj1 = copy.copy(obj)
imprimir obj
imprimir obj1
#---- Resultado----
CopiarObj
Hola