深拷贝与浅拷贝历来就是让人懵懵哒的知识点,让小编带你答疑解惑 在拷贝不同的数据类型时,深拷贝与浅拷贝的规律也是不相同的 一、拷贝字符串、数字,一维元祖等不可变的数据类型时,深拷贝与浅拷贝都是引用指向 [Python] 纯文本查看 复制代码 >>> import copy
>>> a = 100
>>> b = copy.copy(a)
>>> c = copy.deepcopy(a)
>>> a
100
>>> b
100
>>> c
100
>>> id(a)
1640280256
>>> id(b)
1640280256
>>> id(c)
1640280256
二、当拷贝一维列表、字典等可变数据类型,即列表和字典中不嵌套列表和字典, 深拷贝和浅拷贝都会开辟内存空间并将数据复制一份保存下来, 当被拷贝的对象发生变化时,不影响深拷贝与浅拷贝的对象 [Python] 纯文本查看 复制代码 >>> a = [100, 200]
>>> b = copy.copy(a)
>>> c = copy.deepcopy(a)
>>> id(a)
2485240829768
>>> id(b)
2485240849928
>>> id(c)
2485240862728
>>> a.append(300)
>>> a
[100, 200, 300]
>>> b
[100, 200]
>>> c
[100, 200]
三、多维数据类型,外层为元祖,内层为列表、字典时, 浅拷贝是外层和内层都是引用指向, 深拷贝会开辟内存空间,并将数据拷贝一份保存, 当被拷贝的数据发生变化时,会影响浅拷贝的数据,但是不会影响深拷贝的数据 [Python] 纯文本查看 复制代码 >>> a = [100,200]
>>> b = [300,400]
>>> c = (a,b)
>>> d = copy.copy(c)
>>> e = copy.deepcopy(c)
>>> c
([100, 200], [300, 400])
>>> d
([100, 200], [300, 400])
>>> e
([100, 200], [300, 400])
>>> id(c)
2485240664456
>>> id(d)
2485240664456
>>> id(e)
2485240583944
>>> id(c[0])
2485240905928
>>> id(d[0])
2485240905928
>>> id(e[0])
2485240956232
>>> c[0].append(1000)
>>> c
([100, 200, 1000], [300, 400])
>>> d
([100, 200, 1000], [300, 400])
>>> e
([100, 200], [300, 400]) 四、多维数据类型,外层为列表,内层为列表、字典时, 浅拷贝会开辟内存空间,但是存储的是内层数据的引用指向, 深拷贝会开辟内存空间,并将数据拷贝一份保存, 当被拷贝的数据发生变化时,会影响浅拷贝的数据,但是不会影响深拷贝的数据 [Python] 纯文本查看 复制代码 >>> a = [100,200]
>>> b = [300,400]
>>> c = [a,b]
>>> d = copy.copy(c)
>>> e = copy.deepcopy(c)
>>> c
[[100, 200], [300, 400]]
>>> d
[[100, 200], [300, 400]]
>>> e
[[100, 200], [300, 400]]
>>> id(c)
2485240795784
>>> id(d)
2485240808520
>>> id(e)
2485240760712
>>> id(c[0])
2485240784328
>>> id(d[0])
2485240784328
>>> id(e[0])
2485240759176
>>> c
[[100, 200, 1000], [300, 400]]
>>> d
[[100, 200, 1000], [300, 400]]
>>> e
[[100, 200], [300, 400]]
|