当前位置: 首页 > 后端技术 > Python

Fluentpython学习笔记-第八章

时间:2023-03-26 01:37:25 Python

Chapter8-ObjectReferences,Mutability,andGarbageCollection[toc]浅拷贝copy浅拷贝,不会拷贝它的子对象,修改子对象,会受影响importcopya=[1,2,3]b=copy.copy(a)print("ida=",id(a))#ida=1669348705224print("idb=",id(b))#idb=1669348161608print("ida0=",id(a[0]))#ida0=1586588704print("idb0=",id(b[0]))#idb0=1586588704a[0]="hello"print("newa=",a)#newa=['你好',2,3]print("newb=",b)#newb=[1,2,3]b[0]="world"print("new2a=",a)#newa=['hello',2,3]print("new2b=",b)#new2b=['world',2,3]深拷贝deepcopy深拷贝,将拷贝它的子对象,修改子对象,不受影响importcopya=[1,2,3]b=copy.deepcopy(a)print("ida=",id(a))#ida=2760920581064print("idb=",id(b))#idb=2760920037448print("ida0=",id(a[0]))#ida0=1586588704print("idb0=",id(b[0]))#idb0=1586588704a[0]="hello"print("newa=",a)#newa=['hello',2,3]print("newb=",b)#newb=[1,2,3]b[0]="world"print("new2a=",a)#newa=['hello',2,3]print("new2b=",b)#new2b=['world',2,3]两者的区别在于不可变对对象,比如整数、字符串、元组,以及由这些不可变对象组成的集合对象,没有浅拷贝和深拷贝的区别,都是拷贝一个新的对象。当有列表,且字典中有字典或列表时,浅复制只复制外壳,不复制内部元素,而深复制则同时复制外壳和内部元素。.看一个例子:importcopya=[0,[1,2],3]b=copy.copy(a)c=copy.deepcopy(a)c[1][0]="hello"print("a=",a)#a=[0,[1,2],3]print("c=",c)#c=[0,['hello',2],3]b[1][0]="world"print("newa=",a)#newa=[0,['world',2],3]print("newb=",b)#newb=[0,['world',2],3]Tips:相关调试分析可以使用python在线调试