python中复制函数的区别

时间:2013-06-01 11:04:01

标签: python function python-2.7 module

python中的copy.copy和copy.deepcopy函数有什么区别?

>>> copy.deepcopy(li)
[1, 2, 3, 4]

>>> copy.copy(li)
[1, 2, 3, 4]

两者都做同样的事情,任何人都可以告诉这些功能具体做什么

2 个答案:

答案 0 :(得分:5)

>>> import copy
>>> L = [[1,2,3]]
>>> A = copy.copy(L)
>>> A[0].append(4)
>>> A
[[1, 2, 3, 4]]
>>> L
[[1, 2, 3, 4]]
>>> L = [[1,2,3]]
>>> A = copy.deepcopy(L)
>>> A[0].append(4)
>>> A
[[1, 2, 3, 4]]
>>> L
[[1, 2, 3]]

答案 1 :(得分:3)

copy.copy执行浅拷贝而不是执行深拷贝的copy.deepcopy

考虑时:

li = [1, 2, 3, 4]

您不会注意到任何差异,因为您正在复制不可变对象,但请考虑:

>>> import copy
>>> x = copy.copy(li)
>>> x
[[1, 2], [3, 4]]
>>> x[0][0] = 9
>>> li
[[9, 2], [3, 4]]

由于浅复制仅复制列表中的每个引用,因此操作这些复制的引用仍将影响原始列表。

但是以下代码:

>>> x.append(1)

对原始列表没有任何影响。