浅拷贝就是对引用的拷贝,执拷贝父对象,里面的数据不拷贝出来,其中的数据与原对象里面数据用的是相同的地址空间
深拷贝就是对对象的资源的拷贝,拷贝父对象以及里面的子对象。深拷贝把原对象独立开来,有自己的存储空间,有自己定义的数据,跟原对象一点关系也没有。
python中,深拷贝和浅拷贝仅仅是在内存当中对数据的一个应用,在实际开发时,可以考虑这样的数据处理方式对程序速率的影响。
>>> import copy >>> a [1, 2, 3, 'a', 'b', 'c', 'd', 4] >>> a = [1,2,3,['a','b','c']] >>> b=a >>> b [1, 2, 3, ['a', 'b', 'c']] >>> a [1, 2, 3, ['a', 'b', 'c']] >>> id(a) 139794936162184 >>> id(b) 139794936162184
浅拷贝
>>> c = copy.copy(a)
修改对象c,不会影响到对象a,也不会影响到对象c
修改对象a,不会影响到对象c,但是会影响到对象b
修改对象b,不会影响到对象c,但是会影响到对象a
>>> c [1, 2, 3, ['a', 'b', 'c']] >>> id(c) 139794936176904 >>> a [1, 2, 3, ['a', 'b', 'c']] >>> b [1, 2, 3, ['a', 'b', 'c']] >>> c [1, 2, 3, ['a', 'b', 'c']] >>> id(a) 139794936162184 >>> id(b) 139794936162184 >>> id(c) 139794936176904 >>> a.append('d') >>> a [1, 2, 3, ['a', 'b', 'c'], 'd'] >>> b [1, 2, 3, ['a', 'b', 'c'], 'd'] >>> c [1, 2, 3, ['a', 'b', 'c']] >>>
深拷贝
d拷贝了a对象及对象里面的数据,修改a不会影响d,修改a里面的子数据也不会影响d
>>> d = copy.deepcopy(a) >>> d [1, 2, 3, ['a', 'b', 'c'], 'd'] >>> a [1, 2, 3, ['a', 'b', 'c'], 'd'] >>> id(a) 139794936162184 >>> id(a) 139794936162184 >>> a[3].append('d') >>> a [1, 2, 3, ['a', 'b', 'c', 'd'], 'd'] >>> d [1, 2, 3, ['a', 'b', 'c'], 'd'] >>> id(a[3]) 139794936163784 >>> id(d[3]) 139794936176776 >>> a.append('e') >>> a [1, 2, 3, ['a', 'b', 'c', 'd'], 'd', 'e'] >>> d [1, 2, 3, ['a', 'b', 'c'], 'd'] >>> a[3].append('e') >>> a [1, 2, 3, ['a', 'b', 'c', 'd', 'e'], 'd', 'e'] >>> d [1, 2, 3, ['a', 'b', 'c'], 'd'] >>>