首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用arr ()函数时得到错误的答案

在使用arr ()函数时得到错误的答案
EN

Stack Overflow用户
提问于 2021-02-23 03:26:17
回答 3查看 39关注 0票数 2

有一个数组"arr“。我复制了另一个数组"xyz“。我想更新数组"xyz“。却得到了错误的结果。

代码语言:javascript
复制
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:

代码语言:javascript
复制
arr [[0, 2, 2], [2, 2, 2], [2, 2, 0]]
xyz [[0, 2, 2], [2, 2, 2], [2, 2, 0]]

预期交货期:

代码语言:javascript
复制
arr [[1, 2, 2], [2, 2, 2], [2, 2, 1]]
xyz [[0, 2, 2], [2, 2, 2], [2, 2, 0]]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-23 03:40:10

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

如果您只有一个简单数据类型的数组-字符串、数字等,那么浅层副本就可以工作了。但是在你的例子中,它是一个数组。

使用深度复制代替。

代码语言:javascript
复制
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)

产出-

代码语言:javascript
复制
[[1, 2, 3], [1, 2, 3]]
[[7, 2, 3], [1, 2, 3]]
票数 3
EN

Stack Overflow用户

发布于 2021-02-23 03:35:30

list.copy将返回一个浅拷贝。对于嵌套的数据结构,必须使用深度副本。

代码语言:javascript
复制
from copy import deepcopy

xyz = deepcopy(arr)
票数 3
EN

Stack Overflow用户

发布于 2021-02-23 03:41:27

代码语言:javascript
复制
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)

这行得通

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66326627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档