- 直接赋值:新变量直接引用原对象,任一对象改变,则所有指向了同一可变对象的变量都作相同改变。
- 浅拷贝:使用 copy.copy() 函数实现,深拷贝原变量指向的对象的最外层,但引用原变量指向的对象的内层。
- 深拷贝:使用 copy.deepcopy() 函数实现,拷贝可变对象的最外层对象及子对象,新变量指向的和原变量指向的对象两者完全独立。
import copy
a = [1, 2, [3, [4, 5]]]
b = a # 直接赋值: 引用对象,原始对象的最外层到最内层对象均被引用
c = copy.copy(a) # 浅拷贝:原始对象的最外层对象深拷贝,除外层的所有层对象直接赋值
d = copy.deepcopy(a) # 深拷贝,原始对象的最外层到最内层对象均不因原对象的改变而改变
a.append(6)
a[2].append(7)
a[2][1].append(8)
print("a:", a)
print("b:", b)
print("c:", c)
print("d:", d)
a: [1, 2, [3, [4, 5, 8], 7], 6]
b: [1, 2, [3, [4, 5, 8], 7], 6]
c: [1, 2, [3, [4, 5, 8], 7]]
d: [1, 2, [3, [4, 5]]]