深拷贝

深拷贝,将值赋给另外一个变量,这个变量单独拥有这个。
深拷贝,浅拷贝 - 图1

字典类型的深拷贝

  1. import copy
  2. a = {
  3. "name":"xiaoming"
  4. }
  5. b = copy.deepcopy(a)
  6. print(a,b, a==b)
  7. a['name'] = "王大锤"
  8. print(a,b) # {'name': '王大锤'} {'name': 'xiaoming'}

a 的值更改完成之后, b的值还是原来的值。

列表类型数据的深拷贝

  1. import copy
  2. a = [1,2,3,4]
  3. b = copy.deepcopy(a)
  4. print(a,b, a==b)
  5. a[1] = "helloworld"
  6. print(a,b) # [1, 'helloworld', 3, 4] [1, 2, 3, 4]

浅拷贝

两个变量指向的还是同一个关联对象,a的值更改,也会影响b的值;

  1. a = {"name":["a","b"]}
  2. b = a.copy()
  3. print(a,b, a==b)
  4. # 更改list中的值
  5. a['name'].append('c')
  6. # a, b 的值都会收到影响
  7. print(a,b) # {'name': ['a', 'b', 'c']} {'name': ['a', 'b', 'c']}

而在 深度copy中

  1. import copy
  2. a = {"name":["a","b"]}
  3. #b = a.copy()
  4. b = copy.deepcopy(a)
  5. print(a,b, a==b)
  6. # 更改list中的值
  7. a['name'].append('c')
  8. # 但是b的值不会收到影响
  9. print(a,b) # {'name': ['a', 'b', 'c']} {'name': ['a', 'b']}

使用场景

如果在自动化项目中需要进行传参,传参的结果放入到 字典的列表中,如果这个值需要copy一份,建议使用 深度copy, 两个变量单独维护,不会相互影响结果。