列表的变化意外地反映在整个子列表中
在我们深入研究解决方案之前,让我们试着理解这个问题。
我们有一个名为 p 的列表,其中有以下元素
现在我们使用 *操作符将这个列表乘以二 ,形成两个子列表,如下图所示的代码。
经过这样的修改,我们得到一个列表。现在,如果我们试图改变其中一个子列表中的任何一个特定元素,在其他列表中也会看到这种变化。
为什么会出现这种情况呢?
*操作符只是对对象进行操作。它只是创建引用,都指向同一个对象。它并不专门复制或单独评估每一个对象。
这个例子中的*运算符只是试图对现有的子列表做新的引用,而不是创建新的引用。
我们如何防止这种情况呢?
通过使用列表理解和range()函数。
在这种方法中,该元素在每次迭代中都会被重新评估。对于这个元素的每一次评估[2]*4,它都会创建一个新的子列表。
所以所做的改变不是反映在所有的子列表上,而是只反映在其中一个子列表上。
注意: 要了解更多关于列表理解的信息,请参考下面的文章。
www.i2tutorials.com/list-compre…
The postList of lists changes reflected across sublists unexpectedlyappeared first oni2tutorials.