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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是设计使然。在列表的元素上使用乘法时,您正在复制引用。

    请参阅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]]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看