鱼C论坛

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

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

[复制链接]
发表于 2017-8-4 20:50:30 | 显示全部楼层 |阅读模式

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

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

x
  1. >>> list5=[8,6,4]
  2. >>> list4=list5
  3. >>> list5.append(99)
  4. >>> list5
  5. [8, 6, 4, 99]
  6. >>> list4
  7. [8, 6, 4, 99]



  8. >>> list5=[8,6,4]
  9. >>> list4=list5
  10. >>> list5=[0,0,0]
  11. >>> list4
  12. [8, 6, 4]
复制代码



上述两段代码,为什么片段一中list4改变;而片段二中list4没改变!
新手求解答
最佳答案
2017-8-11 18:04:13
爱学习的小fish 发表于 2017-8-4 22:37
是的,您说的那种情况我可以理解。
不过这种情形

你说得这种情况是list4和list5都指向[8,6,4]列表所在的地址,当你用list5.append(99)修改时,只是将[8,6,4]这个列表里的值改了,而他所在的地址还没变,所以list4所在的地址里的值也就变了,因为他俩指向同一个地址;
关键是append修改的是你当前的列表,而另一种方式是直接重新另开辟了一个地址让list5去指向;以上是我的理解
ex4.png
ex5.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-4 21:12:17 | 显示全部楼层
>>>list5=[8,6,4]
>>> list4=list5
一,这里的list4 list5指向 的是同一个地方[8,6,4](可以理解成2个标签贴在同一个商品上)
>>> list5=[8,6,4]
>>> list4=list5
>>> list5=[0,0,0]
二,这里的list4 list5指向 的本来是同一个地方[8,6,4](可以理解成2个标签贴在同一个商品上)
      但是后面你把list5指向了[0,0,0]这个地方。(可以理解成list5标签贴在另一个商品上了)
     所以这里list4还是[8,6,4],而list5是[0,0,0]
注:Python中 变量=变量 是指向同一个地方的;给变量赋值 才是新开辟个空间一个新的地址;想具体了解
可以参考这篇文章

http://blog.csdn.net/yugongpeng_blog/article/details/46604439
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-4 22:37:30 | 显示全部楼层
是的,您说的那种情况我可以理解。
不过这种情形
  1. >>> list5=[8,6,4]
  2. >>> list4=list5
  3. >>> list5.append(99)
  4. >>> list5
  5. [8, 6, 4, 99]
  6. >>> list4
  7. [8, 6, 4, 99]
复制代码


list5进行修改后,也就是list5.append(99),list5的值改变,为什么此时list4的值也随之改变了。
按之前那种方式理解list4的值应该不变,仍然是[8,6,4]呀!这是我疑惑的地方
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-11 17:09:11 | 显示全部楼层
视频里有讲的:Python的变量就像一个标签,一个名字而已,贴那是哪,指哪是哪
例如:
list11 =[1,3,2,9,7,8]
list12 = list11[:]
list13 = list11
042949n159vjspz1ach8o2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-11 17:17:42 | 显示全部楼层
雨之痕迹 发表于 2017-8-11 17:09
视频里有讲的:Python的变量就像一个标签,一个名字而已,贴那是哪,指哪是哪
例如:
list11 =[1,3,2,9,7 ...

不会变,你最后又给list5赋予新的值,但list4的值还是上一步的list51,并没有给list4赋予与list5一样的值,当然不一样,(除非你再list4 = list5)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-11 18:04:13 | 显示全部楼层    本楼为最佳答案   
爱学习的小fish 发表于 2017-8-4 22:37
是的,您说的那种情况我可以理解。
不过这种情形

你说得这种情况是list4和list5都指向[8,6,4]列表所在的地址,当你用list5.append(99)修改时,只是将[8,6,4]这个列表里的值改了,而他所在的地址还没变,所以list4所在的地址里的值也就变了,因为他俩指向同一个地址;
关键是append修改的是你当前的列表,而另一种方式是直接重新另开辟了一个地址让list5去指向;以上是我的理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-12 20:16:08 | 显示全部楼层
qlm0216 发表于 2017-8-11 18:04
你说得这种情况是list4和list5都指向[8,6,4]列表所在的地址,当你用list5.append(99)修改时,只是将[8,6, ...

赞同你的看法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 23:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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