首页  >  文章  >  后端开发  >  为什么 Python 中的嵌套列表共享相同的基础数据?

为什么 Python 中的嵌套列表共享相同的基础数据?

DDD
DDD原创
2024-10-31 07:46:02227浏览

Why Do Nested Lists in Python Share the Same Underlying Data?

嵌套列表索引

在Python中,可以使用列表列表创建嵌套列表。然而,当修改这些列表中的值时,由于 Python 的引用处理,会出现一个常见的陷阱。

考虑以下代码:

<code class="python">some_list = 4 * [(4 * [0])]
for i in range(3):
    for j in range(3):
        some_list[i + 1][j + 1] = 1
for i in range(4):
    print(some_list[i])</code>

预期输出是:

[0, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

然而,实际输出是:

[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

理解问题

问题源于 some_list = 4 * [(4 * [0 ])]。这里,[(4 * [0])] 表达式创建一个包含四个元素的列表,每个元素都是一个包含四个零的列表。然而,后续的乘法 4 * 创建了对同一列表的四个引用,而不是四个不同的列表。

因此,当修改 some_list 的一个元素内的值时,它也会影响其他元素,因为它们都指向同一个底层列表。这种行为在 Python 中称为引用传递。

解决方案

要解决此问题并在 some_list 中创建独立的列表,可以使用循环来单独创建每个子列表,如下所示:

<code class="python">some_list = [(4 * [0]) for _ in range(4)]</code>

此代码创建四个不同的列表,每个列表都有四个零。修改一个子列表中的值将不再影响其他子列表。

以上是为什么 Python 中的嵌套列表共享相同的基础数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn