我爱吃爆米花 发表于 2021-3-6 22:03:02

转圈圈:创建二维列表的疑惑?

size = 3
# 方法1
array = [*size]*size
j = 0;k = 0
array = 1
print(array)
# 结果[, , ]
# 方法2
array = [*size]
for i in range(size-1):
    array += [*size]
array = 1
print(array)
# 结果[, , ]

为什么得出的列表不一致,方法1和方法2的不同点?

逃兵 发表于 2021-3-6 22:16:07

方法一是复制

复制出来的列表实际上指向同一列表

他们的id是相同的

因为id相同的缘故,你改变任何一个列表,另外两个列表也会同时改变

>>> id(array)
1753224
>>> id(array)
1753224
>>> id(array)
1753224

第二种方法,是在内存中生成一个[*size],加入到原列表中

每次生成的列表,都指向新的id

这时候,你改变任何一个列表,都与其他列表没有关系

>>> a = [*size]
>>> b = [*size]
>>> id(a)
51688008
>>> id(b)
12588872

我爱吃爆米花 发表于 2021-3-6 22:16:20

print(id(array),id(array))
# 方法1:1437756480 1437756480 地址竟然一样
# 方法2:1437756480 1437756448
页: [1]
查看完整版本: 转圈圈:创建二维列表的疑惑?