返回

剖析对象:浅拷贝与深拷贝的区别

前端

探究浅拷贝和深拷贝的区别,从以下几个方面着手:

  • 1. 浅拷贝与深拷贝的概念

    • 浅拷贝: 浅拷贝是指,当您创建一个新对象,但它引用的子对象还是原始对象引用的子对象时,这种复制操作就称为浅拷贝。
    • 深拷贝: 深拷贝是指,当您创建一个新对象,同时创建了新对象的子对象,新对象的子对象不与原始对象引用的子对象共享内存空间,而是各自独立。
  • 2. 浅拷贝与深拷贝的区别

    • 1)内存地址: 浅拷贝创建的副本与原始对象引用相同的内存地址,而深拷贝创建的副本拥有其独立的内存地址。
    • 2)引用: 浅拷贝创建的副本仅仅是原始对象的一个副本,当修改副本时,会同时影响原始对象,而深拷贝创建的副本是完全独立于原始对象,修改副本不会影响原始对象。
    • 3)值: 浅拷贝只复制对象的值,而深拷贝复制对象的值和它引用的对象的值。
  • 3. 浅拷贝与深拷贝的应用场景

    • 1)浅拷贝的应用场景: 当您需要创建临时副本,或对副本进行修改不会对原始对象产生影响时,可以选择使用浅拷贝。例如,如果函数或方法需要对某个对象进行临时修改,那么可以进行浅拷贝,这样当函数或方法执行完毕后,副本将被销毁,原始对象不受影响。
    • 2)深拷贝的应用场景: 当您需要创建独立于原始对象的副本时,可以选择使用深拷贝。例如,如果需要将一个对象传递给另一个函数或方法,并且希望修改该副本不会影响原始对象,那么可以使用深拷贝。
  • 4. 浅拷贝与深拷贝的代码示例

    • 1)浅拷贝示例:
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person1 = Person('John', 30)
person2 = person1  # 浅拷贝

person2.name = 'Jane'  # 修改副本

print(person1.name)  # 'Jane'  # 原始对象也受影响
* **2)深拷贝示例:** 
import copy

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person1 = Person('John', 30)
person2 = copy.deepcopy(person1)  # 深拷贝

person2.name = 'Jane'  # 修改副本

print(person1.name)  # 'John'  # 原始对象不受影响