在 Python 中,使用列表乘法创建列表列表,如 [[1] 4] 3,会导致一个子列表的更改影响所有子列表的情况。这种行为是违反直觉的,可能会导致意想不到的后果。
使用列表乘法时,新列表是对原始列表的引用。当您修改新列表的元素时,您实际上是在修改原始列表中所有子列表引用的元素。
出现这种意外行为是因为 Python 在列表理解之前计算乘法运算符 。在这种情况下, [[1] 4] 计算为单个子列表,并且 * 仅创建对该子列表的三个引用。
要避免这种行为并创建三个独立的子列表,您可以使用列表理解,如下所示:
[[1] * 4 for _ in range(3)]
列表理解重新评估[1] * 4 每个子列表的表达式,产生三个不链接的不同子列表。
虽然列表乘法是创建具有重复元素的列表的便捷方法,了解其局限性很重要。列表乘法对现有对象进行操作,而无需查看表达式。它不会复制对象,而是创建对现有对象的引用。
相反,列表推导式会重新评估每个元素的表达式,根据需要创建新对象。此行为可确保列表中的每个元素都是独立的。
以上是为什么在Python中使用列表乘法时修改一个子列表会影响所有子列表?的详细内容。更多信息请关注PHP中文网其他相关文章!