手写一个深拷贝(递归)
时间: 2024-08-14 09:06:50 浏览: 26
手写一个深度拷贝(递归)通常是在需要复制复杂数据结构,如树、图或自定义对象时,当直接赋值不足以创建独立副本时。这里以一个简单的例子说明如何递归地创建对象及其成员的副本:
```python
# 假设有一个Person类
class Person:
def __init__(self, name, age):
self.name = name
self.children = []
def __deepcopy__(self, memo={}):
# 定义一个辅助函数用于复制列表
def copy_list(lst):
return [item for item in lst]
# 创建一个新的Person实例,并复制其属性
cloned_person = Person(self.name, self.age)
cloned_person.children = copy_list(self.children) # 深度拷贝children
# 使用memo记录已经复制过的对象,避免无限递归
memo[id(self)] = cloned_person
return cloned_person
# 示例
person1 = Person("Alice", 30)
person1.children.append(Person("Bob", 5))
# 深度拷贝
person2 = copy.deepcopy(person1)
print(person1 is person2) # 输出 False,证明两个是独立的对象
# 更改person1的属性不会影响person2
person1.children.append(Person("Charlie", 7))
print(person2.children) # 输出空列表,说明children没有改变
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)