使用列表理解与乘法创建空嵌套列表[重复]

问题描述 投票:0回答:1

我正在一个编码网站上尝试一些问题,其中一个问题要求用户创建一个 n 大小的空嵌套列表。所以很自然地,我的第一个倾向就是像这样相乘:

list = [[0]*n]*n

但这不起作用,因为其余代码进入列表并更改了值,并且该解决方案出现了越界错误。 然而,下面的代码确实有效。

list = [[0]*n for _ in range (n)]

我想知道这是怎么回事。据我所知,IDLE 中的结果是相同的。

谢谢你

python list nested
1个回答
-1
投票

这是初学者面临的众所周知的陷阱。当在列表上使用

*
运算符时,对象引用会重复。没有制作该列表的副本。您可以通过在列表元素上执行
id()
来检查它。

第二段代码分别创建

n
列表。因此,每个对象都有自己独特的对象引用。

更新: 这在 Udacity 上被记录为第一个陷阱:https://www.udacity.com/wiki/common-python-pitfalls

© www.soinside.com 2019 - 2024. All rights reserved.