鱼C论坛

 找回密码
 立即注册
查看: 2051|回复: 5

[已解决]关于浅拷贝,深拷贝

[复制链接]
发表于 2021-10-8 05:31:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> x =[[1,2],[2,3]]
>>> y = x
>>> y.append(4)
>>> x
[[1, 2], [2, 3], 4]
>>> x =[[1,2],[2,3]]
>>> y = x.copy()
>>> x
[[1, 2], [2, 3]]

以上是我在idle上跑的,是不是可以理解 y = x是另外的一种深拷贝呢?对x所有元素的引用,而非复制。求大神确认一下~
最佳答案
2021-10-8 11:08:39
不是的,赋值就像贴标签。[[1,2],[2,3]]这个对象在电脑内存里只创建了一个。所以y=x相当于创建一个和x相同的标签y。结果是x和y同时指向[[1,2],[2,3]]这个对象。y.append()这个操作改变了我们唯一的对象:[[1,2],[2,3]],这才会导致调取x的时候调取了[[1,2],[2,3],4]这个被改变了的唯一的对象。赋值和拷贝的不同之处在于,拷贝创造了一个新的对象[[1,2],[2,3]],这个时候内存里面就有两个相同的对象了。一个是一个类似于指针的东西,只是用来调用、指向的,一个却实实在在的创造出了一个相同的对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-8 07:05:42 From FishC Mobile | 显示全部楼层
>> y = x.copy()   这是浅拷贝
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-8 08:42:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-8 11:08:39 | 显示全部楼层    本楼为最佳答案   
不是的,赋值就像贴标签。[[1,2],[2,3]]这个对象在电脑内存里只创建了一个。所以y=x相当于创建一个和x相同的标签y。结果是x和y同时指向[[1,2],[2,3]]这个对象。y.append()这个操作改变了我们唯一的对象:[[1,2],[2,3]],这才会导致调取x的时候调取了[[1,2],[2,3],4]这个被改变了的唯一的对象。赋值和拷贝的不同之处在于,拷贝创造了一个新的对象[[1,2],[2,3]],这个时候内存里面就有两个相同的对象了。一个是一个类似于指针的东西,只是用来调用、指向的,一个却实实在在的创造出了一个相同的对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-9 23:25:31 | 显示全部楼层
FK二十一 发表于 2021-10-8 11:08
不是的,赋值就像贴标签。[[1,2],[2,3]]这个对象在电脑内存里只创建了一个。所以y=x相当于创建一个和x相同 ...

懂了!通俗易懂~谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-9 23:29:41 | 显示全部楼层
逃兵 发表于 2021-10-8 08:42
https://zhuanlan.zhihu.com/p/74527997

谢谢~很好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 23:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表