Python中的append()操作是浅拷贝操作,也就是说Python 在执行append时并没有拷贝这个对象,而只是拷贝了这个对象的引用,如果不注意这一点的话会导致出乎意料的错误。
比如执行下面的代码:
M=['a','b','c','d']
MyList=[['a','b','c','d']]
temp=M[1]
M[1]=M[0]
M[0]=temp
MyList.append(M)
temp=M[2]
M[2]=M[3]
M[3]=temp
MyList.append(M)
print"MyList=",MyList
我们期望的结果是:
MyList= [['a', 'b', 'c', 'd'], ['b', 'a', 'c', 'd'], ['b', 'a', 'd', 'c']]
实际上出现的结果是:
MyList= [['a', 'b', 'c', 'd'], ['b', 'a', 'd', 'c'], ['b', 'a', 'd', 'c']]
为了保险起见,应该这些实现:
import copy
M=['a','b','c','d']
MyList=[['a','b','c','d']]
temp=M[1]
M[1]=M[0]
M[0]=temp
MyList.append(copy.deepcopy(M))
temp=M[2]
M[2]=M[3]
M[3]=temp
MyList.append(copy.deepcopy(M))
print"MyList=",MyList
参考文献:
Python append() 与深拷贝、浅拷贝: