Python —— 深拷贝&浅拷贝

1、看示例
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']]
2、总结

深拷贝(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]]

总结:

浅拷贝只复制了对象的引用,而深拷贝复制了整个对象及其嵌套对象。如果需要对可变对象进行修改而不影响原始对象,应该使用深拷贝。

你可能感兴趣的:(python,java,前端)