Python列表问题
发布于 2021-01-29 17:59:02
python:
m=[[0]*3]*2
for i in range(3):
m[0][i]=1
print m
我希望此代码应打印
[[1, 1, 1], [0, 0, 0]]
但它打印
[[1, 1, 1], [1, 1, 1]]
关注者
0
被浏览
42
1 个回答
-
这是设计使然。在列表的元素上使用乘法时,您正在复制引用。
请参阅Python编程/列表Wikibook上的“列表创建快捷方式”部分,其中详细介绍了对可变对象的列表引用问题。
他们建议的解决方法是列表理解:
>>> s = [[0]*3 for i in range(2)] >>> s [[0, 0, 0], [0, 0, 0]] >>> s[0][1] = 1 >>> s [[0, 1, 0], [0, 0, 0]]