La diferencia entre la copia profunda y la copia superficial de Python

En Python, la asignación y la copia de objetos son diferentes porque implican hacer referencia y copiar objetos. Cuando crea una nueva variable usando una declaración de asignación, harán referencia al mismo objeto. En algunos casos, es posible que desee crear un objeto completamente independiente, en cuyo caso se requerirá una copia.

La copia en Python se divide en copia profunda y copia superficial:

Copia superficial: solo copia la referencia al objeto, no el objeto en sí. El objeto original y el objeto copiado comparten la misma dirección de memoria. Esto significa que si modifica el objeto copiado, el objeto original se verá afectado porque en realidad son el mismo objeto. Se pueden crear copias superficiales mediante corte, el método copy() o funciones de fábrica.

Copia profunda: copia recursivamente un objeto y todos sus subobjetos, en lugar de copiar sus referencias. Una copia profunda crea un objeto completamente independiente en la memoria, por lo que las modificaciones al objeto copiado no afectarán al objeto original. Se pueden crear copias profundas utilizando la función deepcopy() en el módulo de copia.

Aquí hay un código de muestra para comprender mejor estos conceptos:

import copy

# 浅拷贝示例
list1 = [[1, 2], [3, 4]]
list2 = list1.copy()
list1[0][0] = 5
print(list2)   # Output: [[5, 2], [3, 4]]

# 深拷贝示例
list1 = [[1, 2], [3, 4]]
list2 = copy.deepcopy(list1)
list1[0][0] = 5
print(list2)   # Output: [[1, 2], [3, 4]]

En el código anterior, primero creamos una lista list1 que contiene dos sublistas. Luego creamos una nueva lista list2 usando una copia superficial, que hace referencia a la misma sublista. Cuando modificamos la primera sublista en lista1, lista2 también se modificará ya que comparten la misma sublista.

A continuación, utilizamos una copia profunda para crear la lista2, que contiene una copia completa de la lista1, incluidas las sublistas. Cuando modificamos la primera sublista en lista1, lista2 no se modificará porque tienen sublistas diferentes.

Supongo que te gusta

Origin blog.csdn.net/qq_39962271/article/details/129332520
Recomendado
Clasificación