返回
剖析对象:浅拷贝与深拷贝的区别
前端
2023-12-27 04:36:48
探究浅拷贝和深拷贝的区别,从以下几个方面着手:
-
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' # 原始对象不受影响