首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >浅拷贝表

浅拷贝表
EN

Stack Overflow用户
提问于 2020-04-10 17:05:07
回答 1查看 57关注 0票数 0

我很难弄清楚下面这个简单的列表是怎么回事。

在这段代码中,在对列表的浅层副本( matrix2 )进行修改之后,我们替换了列表中的整个列表,更改只反映在matrix2,而不是matrix1,尽管matrix2是matrix1的浅表副本。

代码语言:javascript
运行
复制
>>> matrix1 = [[1, 2], [3, 4]]
>>> matrix2 = matrix1[:]
>>> matrix2[0] = [5, 6]
>>> matrix2
[[5, 6], [3, 4]]
>>> matrix1
[[1, 2], [3, 4]]

在代码的这一部分中,结果是不同的,因为对其中一个值的修改,列表的列表反映了这两个矩阵。

代码语言:javascript
运行
复制
>>> matrix2[1][0] = 1
>>> matrix2
[[5, 6], [1, 4]]
>>> matrix1
[[1, 2], [1, 4]]

我发现了以下内容:之所以会出现这种情况,是因为列表本身并不真正包含对象,而是对内存中那些对象的引用。使用[:]符号复制列表时,将返回一个新列表,其中包含与原始列表相同的引用。

你能帮我弄清楚上面的文字到底是什么意思吗?也许我漏掉了什么我自己也找不到答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-10 17:25:11

例如,您有一个list matrix1=[[1,2], [3,4]],并将其分配给matrix2 = matrix1。当您将matrix1分配给matrix2时,它只是共享一个引用,它不会创建新的数组。现在,如果您更改了matrix1matrix2中的任何数据,则更改将同时适用于这两个列表。

但是,如果使用切片操作,它将创建一个新的列表matrix2 = matrix1[:]。现在,如果您更改matrix2matrix1中的任何数据,则将分别应用更改。

注:切片操作生成表的浅拷贝。

matrix2[0][0] = x --这将在两个列表中更改,因为浅层复制只适用于一个级别,如matrix2[0] = [x,y]

如果您不想更改数据,那么可以使用deepcopy。它递归地复制每个对象。

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

https://stackoverflow.com/questions/61145127

复制
相关文章

相似问题

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