例子1:
import copy
a = [1, 2, 3]
a1 = copy.copy(a)
a2 = copy.deepcopy(a)
a[0] = 22
print a
print a1
print a2
out:
[22, 2, 3]
[1, 2, 3]
[1, 2, 3]
例子2:
import copy
class A(object):
def __init__(self):
self.array =[1, 2, 3]
a = A()
b = copy.copy(a)
c = copy.deepcopy(a)
a.array[0] = 2
print "a", a.array
print "b", b.array
print "c", c.array
out:
a [2, 2, 3]
b [2, 2, 3]
c [1, 2, 3]
从上面的结果可以看到例子1的浅拷贝是没有效果的。
copy这个模块我看很多demo都是例子1这样的,但是它们的结果是对的,我试了下不对。python
版本是2.7
请问我的问题出在哪?
浅拷贝只拷贝对象的引用, [1, 2, 3]是一个列表对象, self.array 引用的这个列表对象,浅拷贝只会拷贝这个引用。