有一个数组"arr“。我复制了另一个数组"xyz“。我想更新数组"xyz“。却得到了错误的结果。
metrix = [[1, 2, 2], [2, 2, 2], [2, 2, 1]]
n,m = 3,3
def package(n,m,arr):
xyz = arr.copy()
for i in range(n):
for j in range(m):
if arr[i][j] == 1:
xyz[i][j]=0
print("arr",arr)
print("xyz",xyz)
package(n,m,metrix)o/p:
arr [[0, 2, 2], [2, 2, 2], [2, 2, 0]]
xyz [[0, 2, 2], [2, 2, 2], [2, 2, 0]]预期交货期:
arr [[1, 2, 2], [2, 2, 2], [2, 2, 1]]
xyz [[0, 2, 2], [2, 2, 2], [2, 2, 0]]发布于 2021-02-23 03:40:10
这是因为array.copy执行一个浅拷贝。源- https://docs.python.org/3/tutorial/datastructures.html
如果您只有一个简单数据类型的数组-字符串、数字等,那么浅层副本就可以工作了。但是在你的例子中,它是一个数组。
使用深度复制代替。
from copy import deepcopy
arr = [ [1,2,3], [1,2,3] ]
arr_copy = deepcopy(arr)
arr_copy[0][0] = 7
print(arr)
print(arr_copy)产出-
[[1, 2, 3], [1, 2, 3]]
[[7, 2, 3], [1, 2, 3]]发布于 2021-02-23 03:35:30
list.copy将返回一个浅拷贝。对于嵌套的数据结构,必须使用深度副本。
from copy import deepcopy
xyz = deepcopy(arr)发布于 2021-02-23 03:41:27
metrix = [[1, 2, 2], [2, 2, 2], [2, 2, 1]]
n,m = 3,3
def package(n,m,arr):
xyz = [[row[i] for row in arr] for i in range(n)]
for j in range(n):
for i in range(m):
if arr[i][j] == 1:
xyz[i][j] = 0
print("arr",arr)
print("xyz",xyz)
package(n,m,metrix)这行得通
https://stackoverflow.com/questions/66326627
复制相似问题