import copy
a = [1,2,3,4,["a","b"]]
b = a
c = copy.copy(a) # 浅拷贝 c= [1, 2, 3, 4, ['a', 'b', 'c']]
print(id(a),id(c))
d = copy.deepcopy(a) # 深拷贝 d= [1, 2, 3, 4, ['a', 'b']]
print(id(a),id(d))
a.append(5)
a[4].append("c")
print("a=",a)
print("b=",b)
print("c=",c)
print("d=",d)
# 输出结果:
32817096 32817032
32817096 32816296
a= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c= [1, 2, 3, 4, ['a', 'b', 'c']]
d= [1, 2, 3, 4, ['a', 'b']]
深拷贝(Deep Copy):
深拷贝创建了一个新的对象,该对象与原始对象的内容相同,包括所有的嵌套对象。深拷贝产生了一个完全独立的复制,修改原始对象中的可变对象不会影响新对象。
示例代码:
import copy
original_list = [1, 2, [3, 4]]
deep_copy_list = copy.deepcopy(original_list)
original_list[0] = 5
original_list[2][0] = 6
print(original_list) # 输出:[5, 2, [6, 4]]
print(deep_copy_list) # 输出:[1, 2, [3, 4]]
浅拷贝(Shallow Copy):
浅拷贝创建了一个新的对象,该对象与原始对象的内容相同,但是对于可变对象(如列表和字典)来说,新对象只是原始对象的一个引用。这意味着,如果修改了原始对象中的可变对象的值,新对象也会受到影响。
另外的示例代码:
import copy
original_list = [1, 2, [3, 4]]
shallow_copy_list = copy.copy(original_list)
original_list[0] = 5
original_list[2][0] = 6
print(original_list) # 输出:[5, 2, [6, 4]]
print(shallow_copy_list) # 输出:[1, 2, [6, 4]]
总结:
浅拷贝只复制了对象的引用,而深拷贝复制了整个对象及其嵌套对象。如果需要对可变对象进行修改而不影响原始对象,应该使用深拷贝。