首页 > 后端开发 > Python教程 > 为什么在Python中使用列表乘法时修改一个子列表会影响所有子列表?

为什么在Python中使用列表乘法时修改一个子列表会影响所有子列表?

DDD
发布: 2024-12-22 08:24:10
原创
1071 人浏览过

Why Does Modifying One Sublist Affect All Sublists When Using List Multiplication in Python?

列表列表更改意外地反映在子列表中

在 Python 中,使用列表乘法创建列表列表,如 [[1] 4] 3,会导致一个子列表的更改影响所有子列表的情况。这种行为是违反直觉的,可能会导致意想不到的后果。

说明

使用列表乘法时,新列表是对原始列表的引用。当您修改新列表的元素时,您实际上是在修改原始列表中所有子列表引用的元素。

出现这种意外行为是因为 Python 在列表理解之前计算乘法运算符 。在这种情况下, [[1] 4] 计算为单个子列表,并且 * 仅创建对该子列表的三个引用。

解决方案

要避免这种行为并创建三个独立的子列表,您可以使用列表理解,如下所示:

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

列表理解重新评估[1] * 4 每个子列表的表达式,产生三个不链接的不同子列表。

与列表乘法的比较

虽然列表乘法是创建具有重复元素的列表的便捷方法,了解其局限性很重要。列表乘法对现有对象进行操作,而无需查看表达式。它不会复制对象,而是创建对现有对象的引用。

相反,列表推导式会重新评估每个元素的表达式,根据需要创建新对象。此行为可确保列表中的每个元素都是独立的。

其他资源

  • [如何克隆列表,使其在之后不会意外更改分配?](https://stackoverflow.com/questions/19850422/how-do-i-clone-a-list-so-that-it-doesnt-change-unexpectedly-after-assignment)
  • [如何初始化二维数组(列表的列表,如果不使用 NumPy) Python?](https://stackoverflow.com/questions/6951326/how-to-initialize-a-two-Dimension-array-list-of-lists-if-not-using-numpy-in-pyt)
  • [字典列表仅存储每个中的最后一个附加值迭代](https://stackoverflow.com/questions/10827325/list-of-dictionary-stores-only-last-append-value-in-every-iteration)

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

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