python的复制和多维数组

最近写面试题的时候遇到了自己都想不到的奇怪小错误

多维数组

在创建多维数组的时候,本来应该是用嵌套的for循环来生成[[0 for i in range(m)] for j in range(n)]
(因为一般网测不能调用numpy,不然就直接用numpy搞了)

但是最近想要偷懒的时候尝试用 [[0] * n] * m 来创建,结果疯狂遭遇bug。

最终原因是发现这样创建出来的数组,每一行都是第一行的引用,所以每次操作大家都会一起变

(但是这种方法可以创建一维的)

list的复制

我一直以为a=b就是list的复制了,但是并不是这样的!!这样的话a是一个关于b的reference,并不是复制b,改变的时候是会一起改变的

下面几种方法可以用:

  • a = list(b)
  • a = b[:]
  • a = b * 1
  • a = copy.copy(b) #需要import copy