首页 > 解决方案 > 为什么嵌套数组在python中复制其元素?

问题描述

看看这段代码

a=[[0]*3]*3
a[1][1]=1
for x in a:
    print(*x)

#output
# 0 1 0
# 0 1 0
# 0 1 0

看看这段代码

a=[
[0,0,0],
[0,0,0],
[0,0,0]
]
a[1][1]=1
for x in a:
    print(*x)

#output
# 0 0 0
# 0 1 0
# 0 0 0

我相信在这两种情况下,数组 a 是相同的。但是为什么结果不一样呢。

标签: arrayspython-3.x

解决方案


在第一个示例中,您正在创建一个列表,然后将其复制三遍。所以每个副本都指向原始列表,我们可以通过打印对象的 id 来看到这一点。

a=[[0]*3]*3
a[1][1]=1
for x in a:
    print(id(x))

#OUTPUT
2330620420744
2330620420744
2330620420744

在第二个示例中,您创建 3 个单独的列表

a=[
[0,0,0],
[0,0,0],
[0,0,0]
]
a[1][1]=1
for x in a:
    print(id(x))

#OUTPUT
2330620420680
2330648632008
2330653113224

如果你想创建一个这样的二维列表,你可以使用 range 函数来创建 x 多个列表。

a = [[[0] for _ in range(3)] for _ in range(3)]
a[1][1] = 1
for x in a:
    print(id(x))

#OUTPUT
2475065760136
2475067183944
2475067184328

推荐阅读