Python共享引用[重复]
Posted
技术标签:
【中文标题】Python共享引用[重复]【英文标题】:Python shared references [duplicate] 【发布时间】:2018-01-14 04:42:29 【问题描述】:我对以下代码感到困惑
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]]
为什么L3
和L4
不受第五行代码影响?这意味着只有L2
与L1
共享对象。有人能解释一下为什么L3
和L4
不创建共享对象而只有L2
可以吗?
【问题讨论】:
【参考方案1】:list(foo)
创建一个新的列表对象,该对象复制foo
中项目的各个值。因此,修改 foo
对象(在您的情况下为 L1
)不会影响新列表中的值。
L2
是一个包含 3 个对 L1
的引用的列表。
L3
和 L4
是列表,每个列表包含 3 个 L1
副本。
您可以使用id()
函数来观察这一点。
【讨论】:
特别是浅拷贝列表;更改整个元素不会反映更改,但会改变意志内的任何对象。以上是关于Python共享引用[重复]的主要内容,如果未能解决你的问题,请参考以下文章