Python深拷贝浅拷贝详解

今天看到b站上一个up的视频,真的是b站最通透最透彻的视频

贴个链接https://www.bilibili.com/video/BV1jT4y1G7AN?from=search&seid=843216970259102307&spm_id_from=333.337.0.0

因为大受启发,所以赶紧写在博客上,方便以后复习学习

浅拷贝:主要就是拷贝父级,父级里的子级不会复制,我举个例子

a = [1,2,3,[4,5,6,[7,8,9]]]

b = a.copy(). #浅拷贝

print(b)

 

 我们可以看到只复制了父级,至于我前面为什么说子级不会复制,而这里却有子级呢?继续看

a = [1,2,3,[4,5,6,[7,8,9]]]

b = a.copy()#浅拷贝

b[2] = 2
b[3][0] = 9
print(a)
print(b)

在看输出结果

 

 我首先对b[2]赋值,b的值修改了,而a的值却没有变,我再次对b[3][0]进行赋值,却发现a和b都发生了改变

这就是因为我们浅拷贝拷贝了a的父级,现在a和b父级是两个互不干扰的个体

而子集并没有拷贝过来,只是指向。一张图就能看懂

 

 

 

图是b站up主的图,数字和我的对不上,主要是看图理解问题

 

深拷贝就很简单了,需要用到copy模块中的deepcopy方法,定义:对父级和子集一同复制下来,但是是两个独立的个体。

我怎么修改其中的值都不会对被复制的值产生影响,说人话直接看图

import copy
a = [1,2,3,[4,5,6,[7,8,9]]]

d = copy.deepcopy(a)
d[2] = 99
d[3][2] = 100
print(a)
print(d)

 

 我对a进行深拷贝,把深拷贝的值给d,对d进行随意修改,随意修改对a没有任何影响。

 

posted @ 2021-11-12 00:15  非非非常帅的辰  阅读(57)  评论(0编辑  收藏  举报