python 的深浅拷贝

python 的深浅拷贝

在Python中,深拷贝(deep copy)和浅拷贝(shallow copy)是用于复制数据结构(如列表或字典)的两种不同方式,它们有以下区别:

浅拷贝(Shallow Copy):

浅拷贝创建一个新的对象,然后将原始对象中的元素(如果是可变对象)复制到新对象中。但是,如果元素本身也是一个可变对象,则新对象中的元素和原始对象中的元素将共享相同的内存地址,因此修改其中一个对象中的元素会影响到另一个对象中相同位置的元素。
浅拷贝可以使用 copy() 方法来实现,或者使用切片操作符 [:]。
深拷贝(Deep Copy):

深拷贝创建一个新的对象,并且递归地复制原始对象中的所有元素及其嵌套对象,因此新对象中的元素与原始对象中的元素完全独立,彼此之间没有关联。
深拷贝可以使用 copy.deepcopy() 函数来实现。
下面是深拷贝和浅拷贝的示例:

import copy

# 原始列表
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 浅拷贝
shallow_copy = copy.copy(original_list)

# 修改原始列表中的一个元素
original_list[0][0] = 100

# 打印浅拷贝和原始列表
print("浅拷贝:", shallow_copy)
print("原始列表:", original_list)

# 深拷贝
deep_copy = copy.deepcopy(original_list)

# 修改原始列表中的一个元素
original_list[1][1] = 200

# 打印深拷贝和原始列表
print("深拷贝:", deep_copy)
print("原始列表:", original_list)

输出结果如下所示:

浅拷贝: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
原始列表: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
深拷贝: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
原始列表: [[100, 2, 3], [4, 200, 6], [7, 8, 9]]

可以看到,浅拷贝的列表中的第一个子列表被修改后,浅拷贝中的对应元素也被修改了,而深拷贝则不受影响。

posted @ 2024-02-27 16:33  寻月隐君  阅读(102)  评论(0编辑  收藏  举报