python - 使用 arr copy() 函数时得到错误答案

标签 python python-3.x

有一个数组“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)

对/对:

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]]

最佳答案

这是因为 array.copy 执行的是浅拷贝。 来源 - https://docs.python.org/3/tutorial/datastructures.html

如果您只有一个简单数据类型的数组——字符串、数字等,浅拷贝就可以了。但在您的情况下,它是一个数组数组。

改用 deepcopy。

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]]

关于python - 使用 arr copy() 函数时得到错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66326627/

相关文章:

python - 导入错误 : No module named 'email.mime' ; email is not a package

python - 使用 python 3.5 安装 cPickle

python - 打印目标列的前 2 个频繁出现的值

python - 关于仅在使用 pd.to_datetime 后保留日期信息

python - python 中的 BMI 计算器 : too many if statements how to reduce that?

python - Pandas 定向 dict 不读取列名称并显示 _0、_1

python - 如何禁用内部 pytest 警告?

python - 无法从数据库返回数组

python - argparse 和互斥组,每个组都有自己需要的设置

python - 尝试使用正则表达式在起点和终点之间找到一个大字符串