copy.copy()是浅复制,copy.deepcopy()是深复制
copy()之后的对象与原对象之间存在联系,可能会出现其中一个改变另外一个也改变的情况:
c=['a','b','d','f','<eos>',[1,24]]
d=copy.copy(c)
d[5].append('ef')
print(d)
print(c)
输出:
['a', 'b', 'd', 'f', '<eos>', [1, 24, 'ef']]
['a', 'b', 'd', 'f', '<eos>', [1, 24, 'ef']]
也就是c,d没有完全独立
但是deepcopy()却是完全独立的;
c=['a','b','d','f','<eos>',[1,24]]
d=copy.deepcopy(c)
d[5].append('ef')
print(d)
print(c)
输出:
['a', 'b', 'd', 'f', '<eos>', [1, 24, 'ef']]
['a', 'b', 'd', 'f', '<eos>', [1, 24]]
要注意的是:python编程中直接赋值是由隐患的。
比如:
c=['a','b','d','f','<eos>',[1,24]] a=c c[1]=3 print(a)
输出:
['a', 3, 'd', 'f', '<eos>', [1, 24]]
可以看出python中直接赋值,相当于copy().这里理解为对于['a','b','d','f','<eos>',[1,24]]这个list对象创建了一个索引c,和索引a,当通过c改变list时,由于c和a指向同一个list因此a的值也发生改变。