[python] 深拷贝 与 浅拷贝

发布于:2025-02-20 ⋅ 阅读:(101) ⋅ 点赞:(0)

一、直接赋值a=b

  • a = b :这是将变量 b 的引用赋给 a ,即 a 和 b 指向内存中同一个对象。

二、浅拷贝 copy()

  • a = b.copy() :会创建一个 b 对象的副本,将副本的引用赋给 a , a 和 b 指向不同的对象。注意copy()是浅拷贝。
#a = b :对 a 或 b 中一个对象进行修改,会影响另一个。比如对列表操作:
b = [1, 2, 3]
a = b
a.append(4)
print(b)  
# 输出[1, 2, 3, 4]


# a = b.copy() :当 b 是可变对象时,对 a 修改通常不会影响 b 。例如:
b = [1, 2, 3]
a = b.copy()
a.append(4)
print(b)  
# 输出[1, 2, 3]

三、深拷贝 deepcopy()

当处理嵌套的可变对象时, copy() 方法执行的浅拷贝可能无法满足需求,因为浅拷贝只会复制顶层对象,嵌套的子对象仍然是引用。而 deepcopy() 会递归地复制所有嵌套的对象,创建一个完全独立的副本。

import copy
# 定义一个嵌套列表
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 使用浅拷贝创建副本
shallow_copied_list = copy.copy(original_list)
# 修改副本中的嵌套列表
shallow_copied_list[0][0] = 100

# 打印原始列表和副本
print("原始列表:", original_list)
print("浅拷贝后的列表:", shallow_copied_list)

# 输出结果
# 原始列表: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
# 浅拷贝后的列表: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
import copy
# 定义一个嵌套列表
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]

# 使用deepcopy创建副本
deep_copied_list=copy.deepcopy(original_list)
# 修改副本中的嵌套列表
deep_copied_list[0][0] = 100

# 打印原始列表和副本
print("原始列表:", original_list)
print("深拷贝后的列表:", deep_copied_list)

# 输出结果
# 原始列表: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 深拷贝后的列表: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]