鱼C论坛

 找回密码
 立即注册
查看: 1848|回复: 4

[已解决]列表问题,求助

[复制链接]
发表于 2022-5-31 23:13:54 | 显示全部楼层 |阅读模式

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

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

x
为什么结果是[[1], [1], [1], [1]], 不应该是[[1], [None], [None], [None]] 吗?
最佳答案
2022-6-1 00:17:46


* 号在对列表使用时表示重复,元素地址是一致,导致赋值第一位就改变所有元素的值

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

使用道具 举报

发表于 2022-5-31 23:50:05 | 显示全部楼层
*不造新对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-1 00:14:41 | 显示全部楼层
res = [[None]*1]*4
res
[[None], [None], [None], [None]]
res[0][0] = 1
res
[[1], [1], [1], [1]]
res[0][0] = 2
res
[[2], [2], [2], [2]]
res[0][1] = 1
Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    res[0][1] = 1
IndexError: list assignment index out of range
res[1][0] = 1
res
[[1], [1], [1], [1]]
看不懂,埋个坑
是因为一开始就这设定了这四个元素是重复的原因吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-1 00:17:46 | 显示全部楼层    本楼为最佳答案   


* 号在对列表使用时表示重复,元素地址是一致,导致赋值第一位就改变所有元素的值

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

使用道具 举报

发表于 2022-6-1 00:31:20 | 显示全部楼层
在python中,所有的都是对象
而你现在使用*将res[n][0](n表示任何数)所管理的对象设置为同一个None(注意:res[n][0]是对象的管理者,不是所有者)
当你再用res[0][0] = 1方式去修改它所管理的对象时,其它该对象的管理者也会被设置为已被修改的对象1,而不是None
但如果你创建了三个不同的None对象,如:
res = [[None],[None],[None]]
那么再设置时,就会出现下面的执行情况,因为a[n][0]管理的是不同的对象
>>> res[0][0] = 1
>>> res
[[1],[None],[None]]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 01:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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