做N皇后的时候,会涉及到二维数组的更新和回退,在这里踩了个坑,总觉得写的逻辑没有问题,但是输出总是空的,怎么回事呢?
在用a[:]或者list(a)创建副本的时候,对一维数组是有效的,但是对于一个二维数组或者更多层的时候,只会复制最表层的列表,而内部的对象仍指向原处(也就是只复制了指针)。这样里面的元素修改的时候,b也会跟着改动,如图所示。
这张图用的就是deepcopy,深拷贝,这样b就不会跟着a的变化而变化了。
做项目的时候也注意多使用深拷贝,免得把别人的东西改了还不知道怎么回事。
做N皇后的时候,会涉及到二维数组的更新和回退,在这里踩了个坑,总觉得写的逻辑没有问题,但是输出总是空的,怎么回事呢?
在用a[:]或者list(a)创建副本的时候,对一维数组是有效的,但是对于一个二维数组或者更多层的时候,只会复制最表层的列表,而内部的对象仍指向原处(也就是只复制了指针)。这样里面的元素修改的时候,b也会跟着改动,如图所示。
这张图用的就是deepcopy,深拷贝,这样b就不会跟着a的变化而变化了。
做项目的时候也注意多使用深拷贝,免得把别人的东西改了还不知道怎么回事。