copy()与deepcopy()之间的区分必须要涉及到python对于数据的存储方式。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。可以看到 cop1,也就是 copy 跟着 origin 改变了。而 cop2 ,也就是 deep copy 并没有变。当在 Python 中 a = something 应该理解为给 something 贴上了一个标签 a。而对 b 的影响则是不同的,一个没有让 b 的值发生改变,另一个变了。b 的值自然不变。把它内部的每一部分都重新改装了一下。所以说看这里的origin[2],也就是 [3, 4] 这个 list。这就是为什么上边 origin[2][0] = “hey!”之后,cop1 也随之变成了 [1, 2, [‘hey!', 4]]。而deepcopy概念图如下: deepcopy的时候会将复杂对象的每一层复制一个单独的个体出来。 这时候的 origin[2] 和 cop2[2] 虽然值都等于 [3, 4],但已经不是同一个 list了。即我们寻常意义上的复制。
暂无评论