鱼C论坛

 找回密码
 立即注册
查看: 1081|回复: 9

[已解决]关于列表的问题

[复制链接]
发表于 2021-8-6 14:47:37 | 显示全部楼层 |阅读模式

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

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

x
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)

各位大佬,为什么这个最终会打印出[1, 2, 3, 4, 5]呀?为什么不是[6]呢?

求解!萌新在这谢过各位大佬了~
最佳答案
2021-8-6 15:00:04
通俗易懂的讲一下
python的变量就像是个标签贴在数据上

有个人叫old,管理大仓库[1,2,3,4,5]
old = [1,2,3,4,5]

某一天,领导把儿子new下派下来跟你管理同一个大仓库,此时你们都是大仓库的管理员

new = old

又过了一段时间,你因为左脚先进门而被处罚,调到了小仓库[6]当管理员

old = [6]

从此以后,说到new大家都知道他是大仓库管理员,而说到old,大家就只知道他是小仓库管理员了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-6 14:50:30 | 显示全部楼层
第二步定义new为[1,2,3,4,5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 14:51:43 | 显示全部楼层
第三行代码重新定义了old却没有定义new
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 14:52:37 | 显示全部楼层
old=[1,2,3,4,5]
old=[6]
new=old
print(new)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 14:52:46 | 显示全部楼层
这里即相当于new 赋值为old
但是new 它不是oid , 只能说是拷贝
当new变化时 , old不会影响 , 因为id 不一样了
  1. >>> old = [1, 2, 3]
  2. >>> new = old
  3. >>> id(old)
  4. 2004529505216
  5. >>> id(new)
  6. 2004529505216
  7. >>> new = [6, 7]
  8. >>> id(new)
  9. 2004562592960
  10. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 15:00:04 | 显示全部楼层    本楼为最佳答案   
通俗易懂的讲一下
python的变量就像是个标签贴在数据上

有个人叫old,管理大仓库[1,2,3,4,5]
old = [1,2,3,4,5]

某一天,领导把儿子new下派下来跟你管理同一个大仓库,此时你们都是大仓库的管理员

new = old

又过了一段时间,你因为左脚先进门而被处罚,调到了小仓库[6]当管理员

old = [6]

从此以后,说到new大家都知道他是大仓库管理员,而说到old,大家就只知道他是小仓库管理员了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-6 15:02:47 | 显示全部楼层
逃兵 发表于 2021-8-6 15:00
通俗易懂的讲一下
python的变量就像是个标签贴在数据上

>>> list1 = [3,6,2]
>>> list2 = list1[:]
>>> list2
[3, 6, 2]
>>> list3 = list1
>>> list3
[3, 6, 2]
>>> list1.sort()
>>> list1
[2, 3, 6]
>>> list3
[2, 3, 6]

谢谢大佬的解答,那为什么这样写,list3又会跟着list1一起改变呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 15:09:59 | 显示全部楼层
supermanmimi 发表于 2021-8-6 15:02
>>> list1 = [3,6,2]
>>> list2 = list1[:]
>>> list2


list.sort()操作是对列表本身去做的改变
list1和list3实际上都指向这个数据
list1和list3都会随着它而变

打个比方
list1是[3,6,2]的管理员
list1 = [3,6,2]
list3是被下派下来跟list1共同管理
list3 = list1
此时list1对仓库做了一些更改
list1.sort()
由于这个仓库是list1和list3共同管理的,所以改变了list1相当于改变了list3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-8-6 17:06:06 | 显示全部楼层
逃兵 发表于 2021-8-6 15:09
list.sort()操作是对列表本身去做的改变
list1和list3实际上都指向这个数据
list1和list3都会随着它 ...

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

使用道具 举报

发表于 2021-8-6 17:09:28 | 显示全部楼层
supermanmimi 发表于 2021-8-6 17:06
谢谢大佬!通俗易懂,我悟了,感谢。

不用客气,弄清楚了就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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