在 Python 中,对象的拷贝方式主要有三种:浅拷贝(shallow copy)、深拷贝(deep copy)、以及直接赋值。每种方式的行为有所不同,特别是在处理嵌套对象时。
1. 直接赋值
直接赋值并不会拷贝对象,而是创建一个新的引用,指向同一个对象。因此,改变对象的内容会影响所有引用。
# 直接赋值
a = [1, 2, 3]
b = a # b 是 a 的引用
b[0] = 99
print(a) # 输出: [99, 2, 3]
print(b) # 输出: [99, 2, 3]
2. 浅拷贝(shallow copy)
浅拷贝会创建一个新的对象,但只复制顶层对象,不会递归复制嵌套的对象。因此,嵌套对象仍然是原始对象的引用。
方法1:使用 copy
模块中的 copy()
函数
import copy
a = [1, 2, [3, 4]]
b = copy.copy(a) # 浅拷贝
b[0] = 99
b[2][0] = 100
print(a) # 输出: [1, 2, [100, 4]]
print(b) # 输出: [99, 2, [100, 4]]
方法2:使用列表的 copy()
方法(仅适用于列表)
a = [1, 2, [3, 4]]
b = a.copy() # 浅拷贝
b[0] = 99
b[2][0]