C++浅拷贝 神拷贝
时间: 2023-11-14 22:06:56 浏览: 38
浅拷贝和深拷贝是在编程中常见的概念,用于复制对象或数据。它们之间的区别在于复制的程度。
浅拷贝指的是创建一个新对象,并将原始对象的非引用类型成员复制到新对象中,而引用类型成员只是复制了引用而已,新对象和原始对象会共享这些引用类型成员。换句话说,浅拷贝只复制对象的第一层,不会递归地复制嵌套的对象。
深拷贝则是创建一个完全独立的新对象,在复制过程中递归地复制了所有嵌套对象及其引用类型成员。这意味着,新对象和原始对象是完全独立的,它们不共享任何引用类型成员。
为了更好地理解浅拷贝和深拷贝,下面是一个示例:
```python
import copy
class Person:
def __init__(self, name):
self.name = name
class Company:
def __init__(self, name, employees):
self.name = name
self.employees = employees
person = Person("John")
company1 = Company("CSDN", [person])
# 浅拷贝
company2 = copy.copy(company1)
# 深拷贝
company3 = copy.deepcopy(company1)
# 修改原始对象
person.name = "Tom"
company1.name = "C知道"
# 输出浅拷贝对象
print(company2.name) # 输出:CSDN
print(company2.employees[0].name) # 输出:Tom
# 输出深拷贝对象
print(company3.name) # 输出:CSDN
print(company3.employees[0].name) # 输出:John
```
在上面的示例中,我们创建了一个 `Person` 类和一个 `Company` 类。`Company` 类包含一个 `employees` 列表,其中存储了 `Person` 对象。
我们首先创建了一个原始对象 `company1`,其中包含了一个名为 "CSDN" 的公司和一个名为 "John" 的员工。然后,我们使用浅拷贝和深拷贝分别创建了 `company2` 和 `company3`。
接着,我们修改了原始对象的属性,即将员工的名称从 "John" 改为了 "Tom",公司的名称从 "CSDN" 改为了 "C知道"。
最后,我们打印浅拷贝对象和深拷贝对象的属性。可以看到,浅拷贝对象和原始对象共享了引用类型成员,所以它们的属性也发生了变化;而深拷贝对象则是完全独立的,不受原始对象的修改影响。