鱼C论坛

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

[已解决]一个关于列表的蹊跷问题,跪求解答

[复制链接]
发表于 2020-2-22 22:00:18 | 显示全部楼层 |阅读模式

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

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

x
代码:
list1 = [[1,4,7],[2,5,8],[3,6,9]]
list2 = [[]]*3
list3 = [[],[],[]]

list1[0].append(9)
list2[0].append(9)
list3[0].append(9)

print(list1)
print(list2)
print(list3)

运行结果:
[[1, 4, 7, 9], [2, 5, 8], [3, 6, 9]]
[[9], [9], [9]]
[[9], [], []]

为什么list2的添加元素操作会添加到所有的子列表里面啊?list2和list3的区别在哪里啊?
最佳答案
2020-2-22 22:05:07
这样做出来list2 = [[]]*3,表面看也是 [[],[],[]],但内部每个[]的地址都是相同的,一个append,其他的也跟着变。
如果需要初始化多个空二维列表最好
list4 = [[] for i in range(n)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-22 22:05:07 | 显示全部楼层    本楼为最佳答案   
这样做出来list2 = [[]]*3,表面看也是 [[],[],[]],但内部每个[]的地址都是相同的,一个append,其他的也跟着变。
如果需要初始化多个空二维列表最好
list4 = [[] for i in range(n)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 22:10:38 | 显示全部楼层
list2 = [[]]*3  与list3 = [[],[],[]]显示结果虽然相同,但是要注意的是list2是通过重复操作符“ * ” 形成的,既然是重复表示 3个列表会保持相同,
所以在改变list2中的任意一个列表,则三个列表都会随之改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 22:15:15 | 显示全部楼层
冬雪雪冬 发表于 2020-2-22 22:05
这样做出来list2 = [[]]*3,表面看也是 [[],[],[]],但内部每个[]的地址都是相同的,一个append,其他的也跟 ...

非常感谢,这个坑隐藏得有点深,不踩不知道啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 22:55:37 | 显示全部楼层
dudaguo 发表于 2020-2-22 22:10
list2 = [[]]*3  与list3 = [[],[],[]]显示结果虽然相同,但是要注意的是list2是通过重复操作符“ * ” 形 ...

谢谢了,因为在编函数,空的嵌套列表要用参数来设定,所以踩到这个坑了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 12:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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