列表中的变化在各子列表中得到反映,这一点出乎意料。

33 阅读1分钟

列表的变化意外地反映在整个子列表中

在我们深入研究解决方案之前,让我们试着理解这个问题。

我们有一个名为 p 的列表,其中有以下元素

现在我们使用 *操作符将这个列表乘以二 ,形成两个子列表,如下图所示的代码。

经过这样的修改,我们得到一个列表。现在,如果我们试图改变其中一个子列表中的任何一个特定元素,在其他列表中也会看到这种变化。

为什么会出现这种情况呢?

*操作符只是对对象进行操作。它只是创建引用,都指向同一个对象。它并不专门复制或单独评估每一个对象。

这个例子中的*运算符只是试图对现有的子列表做新的引用,而不是创建新的引用。

我们如何防止这种情况呢?

通过使用列表理解和range()函数。

在这种方法中,该元素在每次迭代中都会被重新评估。对于这个元素的每一次评估[2]*4,它都会创建一个新的子列表。

所以所做的改变不是反映在所有的子列表上,而是只反映在其中一个子列表上。

注意: 要了解更多关于列表理解的信息,请参考下面的文章。

www.i2tutorials.com/list-compre…

The postList of lists changes reflected across sublists unexpectedlyappeared first oni2tutorials.