首页 > 后端开发 > Python教程 > 为什么列表乘法在 Python 中创建共享子列表?

为什么列表乘法在 Python 中创建共享子列表?

Mary-Kate Olsen
发布: 2024-12-23 12:55:10
原创
1060 人浏览过

Why Does List Multiplication Create Shared Sublists in Python?

列表列表中的意外更改

使用列表乘法创建列表列表时,请小心意外更改。

问题描述

使用简单的列表乘法创建列表列表,例如:

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

可能会导致意想不到的后果。更改一个子列表中的值会影响所有子列表:

xs[0][0] = 5
print(xs)
# [[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
登录后复制

说明

乘法运算符 对对象进行操作,而不是对表达式进行操作。因此, [[1] * 4] * 3 只看到评估的子列表 [1, 1, 1, 1] 三次。 不创建新的子列表,而是创建对现有子列表的引用。

解决方案

要避免这种行为并确保独立的子列表,请使用列表理解:

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

此表达式每次迭代都会重新计算 [1] * 4,从而产生不同的结果

深入理解:不可变整数

需要注意的是,Python 中的整数是不可变的。这意味着像:

1.value = 2
登录后复制

这样的操作是无效的,因为整数没有可修改的值属性。因此,尽管 [1] * 4 没有复制整数本身,但这并不重要,因为整数无法修改。

以上是为什么列表乘法在 Python 中创建共享子列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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