How to make a copy of a 2D array in Python?
本问题已经有最佳答案,请猛点这里访问。
在我看来,使用
但它不适用于二维数组。例如:
1 2 3 4 | x = [[1,2],[3,4]] y = x[:] y[0][0]= 1000 print x |
返回
有人知道什么是正确和简单的方法吗?
使用deepcopy()或copy()是一个很好的解决方案。对于简单的二维数组情况
1 | y = [row[:] for row in x] |
试试这个:
1 2 | from copy import copy, deepcopy y = deepcopy(x) |
我不确定,也许
对于二维数组,可以使用map函数:
1 2 3 4 5 | old_array = [[2, 3], [4, 5]] # python2.* new_array = map(list, old_array) # python3.* new_array = list(map(list, old_array)) |
在您的情况下(因为您使用了列表列表),您必须使用deepcopy,因为'浅复制和深复制之间的差异仅与复合对象(包含其他对象的对象,如列表或类实例)相关:一个浅拷贝构造一个新的复合对象,然后(在可能的范围内)向其中插入对原始对象的引用。深度复制构造一个新的复合对象,然后递归地将原始对象的副本插入其中。
请注意,下面的示例只是为了向您展示一个示例(不要比我强很多),如何为一维和二维数组实现deepcopy:
1 2 3 4 5 6 7 8 9 | arr = [[1,2],[3,4]] deepcopy1d2d = lambda lVals: [x if not isinstance(x, list) else x[:] for x in lVals] dst = deepcopy1d2d(arr) dst[1][1]=150 print dst print arr |
我认为np.tile也可能有用
1 2 3 4 5 6 7 8 9 | >>> a = np.array([0, 1, 2]) >>> np.tile(a, 2) array([0, 1, 2, 0, 1, 2]) >>> np.tile(a, (2, 2)) array([[0, 1, 2, 0, 1, 2], [0, 1, 2, 0, 1, 2]]) >>> np.tile(a, (2, 1, 2)) array([[[0, 1, 2, 0, 1, 2]], [[0, 1, 2, 0, 1, 2]]]) |