深拷贝和浅拷贝程序印证
时间: 2024-04-16 13:23:12 浏览: 14
深拷贝和浅拷贝是在编程中常用的两种对象拷贝方式。
浅拷贝是指创建一个新对象,将原对象的值复制到新对象中,但是新对象中的引用类型属性仍然指向原对象中的相应属性。换句话说,浅拷贝只复制了对象的引用,而不是对象本身。因此,当修改新对象中的引用类型属性时,原对象中的相应属性也会被修改。
深拷贝是指创建一个新对象,并将原对象的值以及引用类型属性的值都复制到新对象中。深拷贝会递归地复制对象的所有属性,包括引用类型属性。因此,修改新对象中的引用类型属性不会影响原对象中的相应属性。
下面是一个示例程序来说明深拷贝和浅拷贝的区别:
```python
import copy
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
class Company:
def __init__(self, name, employees):
self.name = name
self.employees = employees
# 创建一个Person对象
person = Person("Alice", 25)
# 创建一个Company对象,其中employees属性引用了person对象
company1 = Company("ABC Company", [person])
# 浅拷贝company1得到company2
company2 = copy.copy(company1)
# 修改company2中的employees列表
company2.employees.append(Person("Bob", 30))
# 打印company1和company2的employees列表
print(company1.employees)
print(company2.employees)
```
输出结果为:
```
[<__main__.Person object at 0x000001>, <__main__.Person object at 0x000002>]
[<__main__.Person object at 0x000001>, <__main__.Person object at 0x000002>, <__main__.Person object at 0x000003>]
```
可以看到,浅拷贝后的company2中的employees列表增加了一个新的Person对象,但是原来的person对象也被修改了。
如果我们使用深拷贝来创建company2,修改company2中的employees列表不会影响到原来的person对象。你可以尝试将`copy.copy`改为`copy.deepcopy`来进行深拷贝。