1.浅拷贝浅拷贝,简单的理解,就是只拷贝引用,不拷贝其内容。比如酒店的302号房间小于,小于告诉小明他的房间号(假设他知道房间号就拥有钥匙和进入房间的权利),小于给小明加了一把椅子房间,小明可以进房间了见。余宇忘记了自己的房间号,不过还是可以通过小明进入这个房间。代码示例In[1]:d1=[1,2,3]#房间小于302In[2]:d2=d1#告诉小明In[3]:print(id(d1),id(d2))#两个人记住的房间号是302140110307510784140110307510784In[6]:d1.append(4)#小于加一把椅子到302房间In[7]:d1#小于加法,当然可以看到Out[7]:[1,2,3,4]In[8]:d2#小明也进入了302,自然也能看到比贾小的椅子。Out[8]:[1,2,3,4]In[9]:deld1#小于被遗忘的房间302In[10]:d2#小明记得,Out[10]:[1,2,3,4]In[11]:d1#当然Python中有垃圾回收机制--------------------------------------------------------------------------NameErrorTraceback(最近调用last)in()---->1d1NameError:name'd1'isnotdefined这是一个很简单的浅拷贝,看下一个例子In[17]:d3=[1,2]In[18]:d4=['a','b']In[19]:d5=[d3,d4]In[20]:d6=d5In[21]:importcopyIn[22]:d7=copy.copy(d5)In[23]:print(id(d5),id(d6),id(d7))#发现d7的id和另外两个不一样140110298615888140110298615888140110317120880In[24]:d5.append('x')In[25]:d5Out[25]:[[1,2],['a','b'],'x']In[26]:d6Out[26]:[[1,2],['a','b'],'x']In[27]:d7Out[27]:[[1,2],['a','b']]#d7没有变化In[28]:d3.append(3)In[29]:d5Out[29]:[[1,2,3],['a','b'],'x']In[30]:d6Out[30]:[[1,2,3],['a','b'],'x']In[31]:d7Out[31]:[[1,2,3],['a','b']]#d7也有变化Deepcopy,deepcopy是对一个对象的各级拷贝。代码示例In[32]:importcopyIn[33]:p1=['a','b']In[34]:p2=copy.deepcopy(p1)In[35]:print(id(p1),id(p2))140110298618608140110298305312在[36]中:p1。append(3)In[37]:print(p1,p2)['a','b',3]['a','b']In[38]:In[38]:b1=['a','b']In[39]:b2=[1,2]In[40]:c1=[b1,b2]In[41]:c2=copy.deepcopy(c1)In[42]:b1.append('c')In[43]:c1Out[43]:[['a','b','c'],[1,2]]In[44]:c2Out[44]:[['a','b'],[1,2]]从结果可以看出深拷贝和浅拷贝的区别3.不可变数据类型copy.copy是针对不可变类型,不发生拷贝,它只是指向,但是copy.deepcopy仍然是一个拷贝代码示例In[45]:importcopyIn[46]:t1=('a','b')In[47]:t2=copy.copy(t1)In[48]:打印(id(t1),id(t2))140110307485168140110307485168在[49]中:t3=copy.deepcopy(t1)在[50]中:打印(id(t1),id(t3))140110307485168140110307485168