Python:扩展列表的副本 - Bug?

时间:2015-06-05 03:02:35

标签: python

我正在使用Python 3.4 我注意到了这种奇怪的行为:

In [1]: a=[1,2,3,4,5,6,7,8,9]
In [2]: b=[10,11,12,13,14,15,16,17,18,19]
In [3]: type(a)
Out[3]: list

In [4]: a
Out[4]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [5]: b
Out[5]: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

In [6]: c=a
In [7]: c
Out[7]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [8]: c.extend(b)

In [9]: c
Out[9]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

In [10]: a
Out[10]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

为什么在a上应用的extend方法修改了c? 你是否观察到同样的行为?
这是正常的吗?在这种情况下,如何延长c保留a原样?

1 个答案:

答案 0 :(得分:1)

因为在分配c之前将c设置为某些行。 在[6]。

编辑: 由于我的答案并不是很深入,所以。

您希望通过复制“a”将“c”设为新列表。但有两种方法可以复制:浅层和深层复制。

您希望有两个单独的列表,因此您需要深度复制。你不能使用list(),因为它会浅显复制你的列表,当你改变一个值时,你的两个列表仍将是“连接”的。 当你使用

c = copy.deepcopy(a)

您将获得两个单独的列表。