Python3 - 对内存的使用--深拷贝,浅拷贝

时间:2021-12-30 19:56:32

浅拷贝就是对引用的拷贝,执拷贝父对象,里面的数据不拷贝出来,其中的数据与原对象里面数据用的是相同的地址空间

深拷贝就是对对象的资源的拷贝,拷贝父对象以及里面的子对象。深拷贝把原对象独立开来,有自己的存储空间,有自己定义的数据,跟原对象一点关系也没有。

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']
>>>