Python共享引用

Python shared references

本问题已经有最佳答案,请猛点这里访问。

我对以下代码感到困惑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
L1 = [3,6,9,12]
L2 = [L1]*3
L3=[list(L1)]*3
L4 = [list(L1) for i in range(3)]
L1[0]=100

 L2
[[100, 6, 9, 12], [100, 6, 9, 12], [100, 6, 9, 12]]

L3
[[3, 6, 9, 12], [3, 6, 9, 12], [3, 6, 9, 12]]

L4
[[3, 6, 9, 12], [3, 6, 9, 12], [3, 6, 9, 12]]

为什么L3L4不受第五行代码的影响?这意味着只有L2L1有共同的对象。有人能解释为什么L3L4不创建共享对象,只有L2创建共享对象吗?


list(foo)创建一个新的列表对象,复制foo中项目的各个值。因此,修改foo对象(在您的情况下,L1不会影响新列表中的值。

L2是一个列表,其中包含3个对L1的引用。

L3L4是清单,其中每个清单包含3份L1副本。

您可以使用id()函数来观察这一点。