鱼C论坛

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

[已解决][课后作业] 第012讲:列表:一个打了激素的数组3第0题

[复制链接]
发表于 2020-3-31 07:45:12 | 显示全部楼层 |阅读模式

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

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

x
大家好,菜鸡一枚想问个问题
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)

为什么这边old=[6] 不改变new的值,而old.sort()的话会改变 new的值呢?
最佳答案
2020-3-31 10:03:31
old = [1, 2, 3, 4, 5]   #第一次赋值
new = old    #将old 赋值给new   这行代码就等价与  new = [1,2,3,4,5]
old = [6]     #这里你的old重新赋值,就会覆盖原本的old 变量,但是new 来源还是[1,2,3,4,5]
print(new)

你可以这样做
old =  [1,2,3,4,5]
new = old          #他们的根本来源都是[1,2,3,4,5] 
new.append(6)

print(old)

[1,2,3,4,5,6]

同理:
old =  [1,2,3,4,5]
new = old          #他们的根本来源都是[1,2,3,4,5] 
old.append(6)
print(new)

[1,2,3,4,5,6]

python中 变量都有id (通俗说就是来源,id(new)可以查询new的id)

id相同 他们就相当于捆绑在一起了   其中一个改变 另一个也会随之改变  就像   量子纠缠  


而你后面是 old = [6]  是重新给old 赋值 python 就会重新赋予他一个id    就和先前的id 不同 new id 还是原来的old = [1,2,3,4,5] 时候的id

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-31 07:47:16 | 显示全部楼层
因为old是直接把标签撕了下来,贴到了[6]上面,
而sort是列表的内置方法,并不会改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 08:26:06 From FishC Mobile | 显示全部楼层
用通俗的说法,python中先有“值”,再有“变量”,变量只是“值”的“标签”。你的程序逻辑是,先创建列表[1,2,3,4,5],然后给这个列表贴了标签名old,再然后new同样是贴到了此列表上。再接下来,你创建列表[6] ,并给其贴了标签old。new完全没有发生过任何改变,你就没有操作过列表[1,2,3,4,5,]。
但是如果你不创建新列表,old和new都贴在列表[1,2,3,4,5]上。之后使用old.sort(),那就是对[1,2,3,4,5]进行了排序,访问new就会得到改变后的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-31 10:03:31 | 显示全部楼层    本楼为最佳答案   
old = [1, 2, 3, 4, 5]   #第一次赋值
new = old    #将old 赋值给new   这行代码就等价与  new = [1,2,3,4,5]
old = [6]     #这里你的old重新赋值,就会覆盖原本的old 变量,但是new 来源还是[1,2,3,4,5]
print(new)

你可以这样做
old =  [1,2,3,4,5]
new = old          #他们的根本来源都是[1,2,3,4,5] 
new.append(6)

print(old)

[1,2,3,4,5,6]

同理:
old =  [1,2,3,4,5]
new = old          #他们的根本来源都是[1,2,3,4,5] 
old.append(6)
print(new)

[1,2,3,4,5,6]

python中 变量都有id (通俗说就是来源,id(new)可以查询new的id)

id相同 他们就相当于捆绑在一起了   其中一个改变 另一个也会随之改变  就像   量子纠缠  


而你后面是 old = [6]  是重新给old 赋值 python 就会重新赋予他一个id    就和先前的id 不同 new id 还是原来的old = [1,2,3,4,5] 时候的id

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

使用道具 举报

发表于 2020-3-31 10:58:05 | 显示全部楼层
python中变量名是标签,你将变量名重新赋值,意味着将这个标签从原来的地址上撕下来贴到新的地址上去了
可以看看我写的帖子
python细节之2、变量名与标签 变量的赋值与修改

214242e6qj09w5h5qqrqc5.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-2 02:59:31 | 显示全部楼层
啊,谢谢大家! 懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-2 09:36:20 | 显示全部楼层
yester 发表于 2020-4-2 02:59
啊,谢谢大家!  懂了

那就给个最佳吧哈哈  你看着给谁  , 这样也有助于你下次提问别人回答的积极性哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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