如何在Python中制作2D数组的副本?

Rom*_*man 49 python arrays copy object variable-assignment

X是一个2D数组.我想要一个Y与数组具有相同值的新变量X.而且,对Y的任何进一步操作都不应该影响X的值.

在我看来这么自然使用y = x.但它不适用于数组.如果我这样做然后改变y,x也会改变.我发现问题可以像这样解决:y = x[:]

但它不适用于2D阵列.例如:

x = [[1,2],[3,4]]
y = x[:]
y[0][0]= 1000
print x
Run Code Online (Sandbox Code Playgroud)

回报[ [1000, 2], [3, 4] ].它还如果我更换于事无补y=x[:]y = x[:][:].

有人知道什么是正确而简单的方法吗?

Rya*_* Ye 67

使用deepcopy()或copy()是一个很好的解决方案.对于简单的2D阵列情况

y = [row[:] for row in x]
Run Code Online (Sandbox Code Playgroud)

  • +1列表推导版本.它适用于2d数组,并且比deepcopy(x)更快. (2认同)

Con*_*ius 49

试试这个:

from copy import copy, deepcopy
y = deepcopy(x)
Run Code Online (Sandbox Code Playgroud)

我不确定,也许copy()已经足够了.

  • copy() 是不够的,它是浅复制,因此结果将是对原始行列表的引用的副本。 (3认同)
  • 对于float副本的2D数组不起作用,但是deepcopy起作用,谢谢! (2认同)

Ана*_*нин 9

对于2D数组,可以使用map函数:

old_array = [[2, 3], [4, 5]]
# python2.*
new_array = map(list, old_array)
# python3.*
new_array = list(map(list, old_array))
Run Code Online (Sandbox Code Playgroud)

  • 我认为你需要"强制转换",就像new_array = list(map(list,old_array)) (2认同)