首页 > 后端开发 > Python教程 > 为什么修改嵌套 Python 列表中的子列表会影响所有子列表?

为什么修改嵌套 Python 列表中的子列表会影响所有子列表?

Barbara Streisand
发布: 2024-12-29 07:50:12
原创
316 人浏览过

Why Does Modifying a Sublist in a Nested Python List Affect All Sublists?

Python 中的嵌套列表可变性混乱

简介:

Python 中的一个常见问题处理嵌套列表时出现。对子列表所做的更改会意外影响外部列表中的所有其他子列表。这种意外行为源于列表创建和可变性的底层机制。

问题:

考虑以下代码:

xs = [[1] * 4] * 3
登录后复制

This代码创建一个列表列表,其中每个子列表包含四个 1。但是,修改最里面的一个元素(如下所示)会影响所有子列表:

xs[0][0] = 5
登录后复制

不是仅更改第一个子列表的第一个元素,而是所有子列表的所有第一个元素都修改为 5。

原因:

理解这种行为的关键在于方式Python 将序列相乘。在现有列表 [x] 上使用 * 运算符时,它不会创建新列表。相反,它会创建对同一列表对象的多个引用。

因此,在代码 xs = [[1] * 4] * 3 中,表达式 [1] * 4 被计算一次,并且计算了 3 次对该单个列表的引用被分配给外部列表。这意味着所有子列表都是同一个对象。

解决方案:

要创建独立的子列表,您可以使用列表理解:

xs = [[1] * 4 for _ in range(3)]
登录后复制

在这种情况下,列表推导式每次迭代都会重新计算 [1] * 4 表达式,从而产生三个不同的结果

整数的不变性:

需要注意的是,Python 中的整数是不可变的,这意味着它们的值不能更改。因此,即使 * 运算符创建对同一列表的多个引用,该列表中的整数值仍然不受影响。

以上是为什么修改嵌套 Python 列表中的子列表会影响所有子列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板