A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

深拷贝与浅拷贝历来就是让人懵懵哒的知识点,让小编带你答疑解惑
在拷贝不同的数据类型时,深拷贝与浅拷贝的规律也是不相同的
一、拷贝字符串、数字,一维元祖等不可变的数据类型时,深拷贝与浅拷贝都是引用指向
[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]]

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马