--

python: 对 list 对象进行复制

很多时候我们需要对于 一个list 进行复制,如果我们 用

  a = [1,2,3]
  b = a
  print(a)
  print(b)
  print(id(a))
  print(id(b))
  
那么你会发现其实a 和b 指向了相同的一个对象

如果你对a 和b 比较了解,知道他们是一个层次只有一层的list,那么简单的可以用
                  
  a = [1,2,3]
  b = a[:]
  print(id(a))
  print(id(b))
  
你会发现a 确实被复制到了b,对a 进行append 之类操作,不会影响到b。 如果a 是一个层次比较深的list,比如下面这样
                  
  a = [[1,2], [3,4], 5]
  b = a[:]
  print(id(a))
  print(id(b))
  a.append(6)
  print(a)
  print(b)
  
这样的话,你只是在第一层次进行了copy
                  
  print(id(a[0]))
  print(id(b[0]))
  a[0].append(7)
  print(a)
  print(b)
  
如果像上面这样比较复杂,那么可以选用copy模块的deepcopy函数
                  
  import copy
  a = [[1,2], [3,4], 5]
  b = copy.deepcopy(a)
  print(id(a[0]))
  print(id(b[0]))
  a[0].append(6)
  print(a)
  print(b)
  
很好,这样确实 a 所有的数据都复制给了 b