浅拷贝

浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。大白话就是,只copy一层,再深一层没copy还是指向同一对象(地址)。

  1. >>>a = [[1], 2, 3]
  2. >>> b = a.copy()
  3. >>> a, b
  4. ([[1], 2, 3], [[1], 2, 3])
  5. >>> a.append(4)
  6. >>> a, b
  7. ([[1], 2, 3, 4], [[1], 2, 3])
  8. >>> a[0].append(4)
  9. >>> a, b
  10. ([[1, 4], 2, 3, 4], [[1, 4], 2, 3])

浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数。

  1. #切片操作属于浅拷贝,所以我们在初始化列表时,一维列表可以采用此种方式初始化,而二维列表就不可以了!
  2. lst1 = lst[:]
  3. lst1 = [each for each in lst]
  4. #工厂函数
  5. lst1 = list(lst)
  6. #copy()函数如上所示

深拷贝

深度拷贝需要引入 copy 模块:

  1. >>>import copy
  2. >>>a = [[1], 2, 3]
  3. >>> b = copy.deepcopy(a)
  4. >>> a, b
  5. ([[1], 2, 3], [[1], 2, 3])
  6. >>> a.append(4)
  7. >>> a, b
  8. ([[1], 2, 3, 4], [[1], 2, 3])
  9. >>> a[0].append(4)
  10. >>> a, b
  11. ([[1, 4], 2, 3, 4], [[1], 2, 3])

赋值

不拷贝,指向同一个对象

总结

截屏2020-02-22上午8.53.38.png
截屏2020-02-22上午8.53.50.png
截屏2020-02-22上午8.54.01.png