鱼C论坛

 找回密码
 立即注册
查看: 1980|回复: 6

[已解决]分片“拷贝”的问题

[复制链接]
发表于 2018-8-6 17:32:52 | 显示全部楼层 |阅读模式

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

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

x
各位鱼油,我对下面的代码产生了疑问:
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
[1, 2, 3, 4, 5]


按照我的逻辑,我来分析下这几句代码:
new = old 将[1, 2, 3, 4, 5]这个列表同时贴上了new old 两个标签,也就是说new、old两个变量同时指向这个列表。
那么问题来了,将[6]这个列表赋值给了old变量,那么就应该实现了覆盖啊,打印print(new)应该是 [6] 吧。

不明所以的我,进行了这么一般测试:(将第二三行的代码执行顺序换了下)
>>> old = [1, 2, 3, 4, 5]
>>> old = [6]
>>> new = old
>>> print(new)
[6]

对此,有点费解,请各位鱼油高抬贵口,讲解一番。
最佳答案
2018-8-6 17:37:24
hi 请lz参考
>>> old = [1,2,3]
>>> new = old
>>> id(old)
53994888
>>> id(new)
53994888
>>> old = [4]
>>> id(old)   #变量old的内存地址发生了变化
53808840
>>> id(new)
53994888
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-6 17:37:24 | 显示全部楼层    本楼为最佳答案   
hi 请lz参考
>>> old = [1,2,3]
>>> new = old
>>> id(old)
53994888
>>> id(new)
53994888
>>> old = [4]
>>> id(old)   #变量old的内存地址发生了变化
53808840
>>> id(new)
53994888
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-8-6 17:43:37 From FishC Mobile | 显示全部楼层
第一个的第二行,把new赋值,然后你修改的有事old的值,所以并不影响new.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-6 17:44:51 | 显示全部楼层

!!!!蟹蟹啦.另外 我也是海贼迷。哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-6 17:48:33 | 显示全部楼层
拉了盏灯 发表于 2018-8-6 17:43
第一个的第二行,把new赋值,然后你修改的有事old的值,所以并不影响new.

嗯!我知道这个效果了,但鱼友 我想知道的是 为什么会产生这样的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 19:09:51 | 显示全部楼层
好きだ 发表于 2018-8-6 17:44
!!!!蟹蟹啦.另外 我也是海贼迷。哈哈哈

没事 ,客气啦  :) 海贼迷握个爪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 21:45:28 | 显示全部楼层
我还是不太明白为什么地址只有old会变,既然赋值了,即使变化不应该同时变化吗?希望大家解答一下,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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