深拷贝和浅拷贝

112 阅读1分钟

深拷贝和浅拷贝是指拷贝一个对象时,新对象的地址、值、引用会与原对象完全不同。它们的区别在于深拷贝会递归地将引用的对象也拷贝一份,而浅拷贝只是拷贝了引用,不会对引用对象进行拷贝。

下面是一个演示代码:

# 浅拷贝示例

original_list = [1, 2, 3, [4, 5]]

# 使用切片进行浅拷贝
shallow_copy = original_list[:]

# 修改原始列表中的引用对象
original_list[3].append(6)

# 输出浅拷贝和原始列表
print(shallow_copy)
print(original_list)


# 深拷贝示例

import copy

original_dict = {'name': 'Tom', 'age': 20, 'address': {'street': '123 Main St', 'city': 'New York'}}

# 使用 deepcopy 进行深拷贝
deep_copy = copy.deepcopy(original_dict)

# 修改原始字典中的引用对象
original_dict['address']['city'] = 'Los Angeles'

# 输出深拷贝和原始字典
print(deep_copy)
print(original_dict)

输出结果:

# 浅拷贝
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5, 6]]

# 深拷贝
{'name': 'Tom', 'age': 20, 'address': {'street': '123 Main St', 'city': 'New York'}}
{'name': 'Tom', 'age': 20, 'address': {'street': '123 Main St', 'city': 'Los Angeles'}}

可以看到,浅拷贝后的新列表与原始列表共享了内部列表的引用,因此修改原始列表的内部列表同时也会修改浅拷贝的内部列表。而深拷贝则完整地复制了原始字典及其内部的子对象,因此修改原始字典的内部对象不会影响深拷贝的结果。