C++的浅拷贝和深拷贝
时间: 2023-11-03 11:04:46 浏览: 95
浅拷贝和深拷贝是在进行对象的复制操作时常用的概念。
浅拷贝(Shallow Copy)是指创建一个新对象,将原始对象的非引用类型属性(如基本数据类型、字符串等)直接复制到新对象中,而对于引用类型属性(如对象、数组等),只复制其引用而不是复制对象本身。简单来说,浅拷贝只复制对象的表面层级。
深拷贝(Deep Copy)是指创建一个新对象,并且递归地复制原始对象的所有引用类型属性及其嵌套属性,使得新对象与原始对象完全独立,互不影响。深拷贝会复制对象的所有层级,包括嵌套的对象。
下面是一个示例代码来说明浅拷贝和深拷贝的区别:
```python
import copy
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person1 = Person("Alice", 25)
person2 = copy.copy(person1) # 浅拷贝
print(person1.name, person1.age) # 输出:"Alice 25"
print(person2.name, person2.age) # 输出:"Alice 25"
person2.name = "Bob"
person2.age = 30
print(person1.name, person1.age) # 输出:"Alice 25",原始对象未受影响
print(person2.name, person2.age) # 输出:"Bob 30"
person3 = copy.deepcopy(person1) # 深拷贝
print(person1.name, person1.age) # 输出:"Alice 25"
print(person3.name, person3.age) # 输出:"Alice 25"
person3.name = "Charlie"
person3.age = 35
print(person1.name, person1.age) # 输出:"Alice 25",原始对象未受影响
print(person3.name, person3.age) # 输出:"Charlie 35",新对象与原始对象完全独立
```
在上述代码中,通过浅拷贝创建了`person2`对象,并修改其属性后,并不会影响到原始的`person1`对象。而通过深拷贝创建了`person3`对象,即使修改了`person3`的属性,也不会影响到原始的`person1`对象。
阅读全文