Colección de citas famosas - Mensajes de felicitación - Ejemplo para distinguir entre copia superficial y copia profunda en Python

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

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