鱼C论坛

 找回密码
 立即注册
查看: 1685|回复: 10

[已解决]12课课后习题疑惑

[复制链接]
发表于 2017-8-21 15:52:02 | 显示全部楼层 |阅读模式

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

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

x
old = [1,2,3,4,5]
new = old
old = [6]
print(new)
打印结果为 [1,2,3,4,5]的原因是因为第一轮给new赋值了,而old重新赋值了,new不变吗?
最佳答案
2017-8-21 16:06:58

old = [1,2,3,4,5]---old指向地址1
new = old---new也指向地址1
old = [6]---old指向地址2
print(new)---new还指向地址1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-21 15:56:29 | 显示全部楼层
本帖最后由 新手·ing 于 2017-8-21 16:04 编辑

沙发
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-21 16:02:02 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2017-8-21 15:56
new = old你能理解
这是new就是old
但是old = [6]

不对啊 我记得教材里有说过赋值就是贴标签是墙头草 分片拷贝才不会变吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 16:03:58 | 显示全部楼层
s1dney 发表于 2017-8-21 16:02
不对啊 我记得教材里有说过赋值就是贴标签是墙头草 分片拷贝才不会变吧?

能说具体点吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 16:06:58 | 显示全部楼层    本楼为最佳答案   

old = [1,2,3,4,5]---old指向地址1
new = old---new也指向地址1
old = [6]---old指向地址2
print(new)---new还指向地址1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 16:09:28 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2017-8-21 16:03
能说具体点吗

引用自教材p36:
>>>list1 = [1,3,2,9,7,8]
>>>list2 = list1[:]
>>>list3 = list1

>>>list1.sort()
>>>list1
[1,2,3,7,8,9]
>>>list2
[1,3,2,9,7,8]
>>>list3
[1,2,3,7,8,9]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 16:26:54 | 显示全部楼层
>>>list1 = [1,3,2,9,7,8]---指向地址1
>>>list2 = list1[:]---指向地址2
>>>list3 = list1---指向地址1

>>>list1.sort()--指向地址1,与给list1重新赋值不同,如果这是list1 = [2, 3, 4],list1就指向另一个地址了
>>>list1
[1,2,3,7,8,9]
>>>list2
[1,3,2,9,7,8]
>>>list3
[1,2,3,7,8,9]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 18:25:33 | 显示全部楼层
冬雪雪冬 发表于 2017-8-21 16:26
>>>list1 = [1,3,2,9,7,8]---指向地址1
>>>list2 = list1[:]---指向地址2
>>>list3 = list1---指向地址1
...

细节好多
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-23 22:08:06 | 显示全部楼层
冬雪雪冬 发表于 2017-8-21 16:06
old = [1,2,3,4,5]---old指向地址1
new = old---new也指向地址1
old = [6]---old指向地址2

请问为什么new还是指向地址1呢?不是old变了吗?new = old 那么new为什么随着old的赋值变化而i指向地址2了呢?,谢谢解惑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-23 22:16:59 | 显示全部楼层
微笑工乂 发表于 2017-8-23 22:08
请问为什么new还是指向地址1呢?不是old变了吗?new = old 那么new为什么随着old的赋值变化而i指向地址2 ...

对python变量的赋值有个形象的比喻,就是贴标签。
old = [1,2,3,4,5]---先在内存中放置[1,2,3,4,5],并给它贴上old的标签。
new = old---把new的标签也贴上,这时内存中放置[1,2,3,4,5]的位置有了两个标签了。
old = [6]---先在内存中放置[6],把标签old从[1,2,3,4,5]的位置揭下,重新贴在[6]的位置,而new仍然帖子[1,2,3,4,5]的位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-23 22:19:52 | 显示全部楼层
冬雪雪冬 发表于 2017-8-23 22:16
对python变量的赋值有个形象的比喻,就是贴标签。
old = [1,2,3,4,5]---先在内存中放置[1,2,3,4,5],并 ...

哦哦,明白了,谢谢你的解惑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 17:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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