鱼C论坛

 找回密码
 立即注册
查看: 1279|回复: 2

[已解决]为什么相同的赋值,结果却不同?

[复制链接]
发表于 2022-3-9 13:02:08 | 显示全部楼层 |阅读模式

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

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

x
>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]


>>> array = [[0]*3]*3
>>> array
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> array[1][1] = 1
>>> array
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]

为什么 x[1][1] = 0  的结果是  [[1, 2, 3], [4, 0, 6], [7, 8, 9]]
而        array[1][1] = 1的结果是 [[0, 1, 0], [0, 1, 0], [0, 1, 0]]?
最佳答案
2022-3-9 13:09:53
array = [[0]*3]*3 这种方式来赋值其实乘以3的是列表的地址,

而不会新建列表对象,所以里面的3个列表其实是指向同一个列表的,

所以其中一个发生改变另外两个也就跟着变了,

你可以把 array = [[0]*3]*3 改成 array = [[0]*3 for i in range(3)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-9 13:09:53 | 显示全部楼层    本楼为最佳答案   
array = [[0]*3]*3 这种方式来赋值其实乘以3的是列表的地址,

而不会新建列表对象,所以里面的3个列表其实是指向同一个列表的,

所以其中一个发生改变另外两个也就跟着变了,

你可以把 array = [[0]*3]*3 改成 array = [[0]*3 for i in range(3)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-9 13:13:13 | 显示全部楼层
你看到的是假象,array = [[0]*3]*3这样赋值只是看起来一样,实际上他们都指向同一个地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 03:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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