要实现深拷贝而不使用deepcopy
,可以通过递归遍历对象的属性,并创建一个新的对象来实现。
下面是一个示例代码,其中包含一个自定义的类Person
和一个deep_copy
函数来实现深拷贝:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def deep_copy(obj):
if isinstance(obj, (int, float, str)):
return obj
elif isinstance(obj, list):
new_list = []
for item in obj:
new_list.append(deep_copy(item))
return new_list
elif isinstance(obj, dict):
new_dict = {}
for key, value in obj.items():
new_dict[key] = deep_copy(value)
return new_dict
elif isinstance(obj, Person):
new_person = Person(obj.name, obj.age)
return new_person
else:
return obj
# 示例用法
person1 = Person("Alice", 25)
person2 = deep_copy(person1)
person2.name = "Bob"
print(person1.name) # 输出: Alice
print(person2.name) # 输出: Bob
在上面的代码中,deep_copy
函数接受一个对象作为参数,并根据对象的类型进行递归地拷贝。对于基本类型(如int
、float
、str
),直接返回原始值;对于列表和字典,遍历元素并递归地进行深拷贝;对于自定义类(如Person
),创建一个新的对象并将属性值进行复制。
注意,这只是一个简单的示例,针对不同的对象类型可能需要进行适当的修改和扩展。