Python列表乘法:[[...]] * 3使3个列表在修改时相互镜像为什么会这样?我真的不明白:>>> P = [ [()]*3 ]*3>>> P[[(), (), ()], [(), (), ()], [(), (), ()]]>>> P[0][0]=1>>> P[[1, (), ()], [1, (), ()], [1, (), ()]]
3 回答
jeck猫
TA贡献1909条经验 获得超7个赞
您已对同一列表进行了3次引用。
>>> a = b = []>>> a.append(42)>>> b[42]
你想这样做:
P = [[()] * 3 for x in range(3)]
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
你也可以像这样写它,它具有显示结构的优点 [[()]*3]*3
>>> P=[i[:] for i in [[()]*3]*3]>>> P[0][0]=1>>> P[[1, (), ()], [(), (), ()], [(), (), ()]
它也比使用范围稍快。来自ipython shell:
In [1]: timeit P = [ [()]*3 for i in range(3) ]1000000 loops, best of 3: 1.41 us per loopIn [2]: timeit P=[i[:] for i in [[()]*3]*3]1000000 loops, best of 3: 1.27 us per loop
杨__羊羊
TA贡献1943条经验 获得超7个赞
列表是可变的,将列表乘以数字不会复制其元素。您可以尝试将其更改为列表理解,因此它将评估[()]*3
三次,创建三个不同的列表:
P = [ [()]*3 for i in range(3) ]
添加回答
举报
0/150
提交
取消