【Python】Python深拷贝和浅拷贝有什么区别?

Python中的浅拷贝和深拷贝主要有以下区别:

  1. 浅拷贝只拷贝对象本身,而不拷贝对象包含的子对象。深拷贝会递归拷贝对象包含的子对象。
## python www.itzhimei.com 代码
import copy

a = [1, 2, [3,4]]
b = copy.copy(a) # 浅拷贝
c = copy.deepcopy(a) # 深拷贝

a.append(5) 
a[2].append(6)

print(a) # [1, 2, [3, 4, 6], 5]
print(b) # [1, 2, [3, 4, 6]] 
print(c) # [1, 2, [3,4]]
  1. 浅拷贝创建了一个新对象,并拷贝原对象的引用。深拷贝创建了一个新对象,递归拷贝原对象中的子对象。
## python www.itzhimei.com 代码
print(a is b) # False
print(a[2] is b[2]) # True

print(a is c) # False 
print(a[2] is c[2]) # False
  1. 浅拷贝只拷贝一层对象,对于可变子对象仍指向原对象。深拷贝拷贝多层对象,对于可变子对象创建副本。
  2. 浅拷贝效率高,资源消耗少。深拷贝需要递归复制,效率低,资源消耗大,但可以完全拷贝独立的对象。

总之,拷贝方式应根据对象包含的子对象落实选择。包含不可变子对象时浅拷贝,包含可变子对象时使用深拷贝。