Python中copy()和deepcopy()的区别
copy:在python中,copy是属于浅复制,什么是浅复制呢?也就是在复制的时候复制了对象的本身,但是对于对象中所引用的对象没有复制,所谓的对象所引用的对象就相当于列表的嵌套,即列表中有一些元素又是列表,例如:list=[[1,2,3],2,3,4,5]list中有一个元素是[1,2,3],那么[1,2,3](设为list1)就相当于list所引用的一个对象:
当有表达式: list2 = list.copy()时,对于list中的一般元素,就是把实际对象复制给list2,但是list中的元素类型为列表的,仅仅是把引用的地址复制给list2,也就是在list2和list中的第一个元素引用是同一个对象,所以当有一个发生改变时,另外一个的该元素也会发生变化,而其它元素是把对象的本身复制,所以当任何一个发生变化时,只是把这个元素指向修改后的元素的地址,而另外一个对应的值指向的内存地址不会因为上一个的改变而改变.
deepcopy:深度复制,就是把list中的元素list[0]的本身会复制一份给list2,也就是在经过此表达式后,list2中元素为列表的会新生成一个内存地址存放,所以这两个列表的list[0]和list2[0]所指向的内存地址不会相同,如下:
所以当任何一个中元素为可变类型的数据发生改变是,经过深复制后的另外一个列表中同样的可变类型的数据不会发生改变