我正在使用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
原样?
答案 0 :(得分:1)
因为在分配c之前将c设置为某些行。 在[6]。
编辑: 由于我的答案并不是很深入,所以。
您希望通过复制“a”将“c”设为新列表。但有两种方法可以复制:浅层和深层复制。
您希望有两个单独的列表,因此您需要深度复制。你不能使用list(),因为它会浅显复制你的列表,当你改变一个值时,你的两个列表仍将是“连接”的。 当你使用
c = copy.deepcopy(a)
您将获得两个单独的列表。