欢迎访问尚贤官网,我们提供网站建设与推广服务!
全国热线:18537972228

扫码领取大额优惠劵

您当前位置: 技术开发 - PYTHON关于深浅拷贝

PYTHON关于深浅拷贝

时间:2022-10-23 14:23:24 来源:洛阳尚贤科技

浅拷贝:只能*层互不影响,第二层就会互相影响(共用)

直接赋值的话,*层和第二层都是互相影响的。

1、切片就是浅拷贝。也就是复制一层。list02 = list01[:] 

优点:结省内存
缺点:当深层数据被修改时,互相影响

注意:拷贝时应优先选择浅拷贝。因为一层的列表不需要深拷贝, 即使多层列表,那它的内表通常是不变的,所以也用不到深拷贝。何必浪费内存。

举例说明:

list01 = [10, [20, 30]]   #这里面有两层,即两个表
list02 = list01[:]   #切片复制会复制一层得到新的列表地址(所以就2份了),复制后得到的是10的列表地址,和[20, 30] 的上一级列表地址,也就是说并没有得到[20, 30]本身的列表地址。总结:浅拷贝,*层数据两份,深层数据一份。

list02[0] = 100 # 因此,这里的修改是在新的列表地址上做的修改,两分互不影响,故不影响原表。

list02[1][1] = 300  #但是这里的第二个[1]对应的是原表中的内表,这个内表[20, 30] 的列表地址没有被list02 拷贝走。因此,它还是一份,根据一份互相影响的原则,这里的改动一定影响原表。

print(list02)  # [100, [20, 300]]  可以看到list02的 *个数被改,但原表的*个数没改。
print(list01)  #[10, [20, 300]]   不过原表的内表第二个数被改了。证明以上逻辑正确。这就是浅拷贝。



深拷贝:是为了所有都互不影响

全部赋值就是深拷贝,也就是复制所有层。


list02 = copy.deepcopy(list01)

优点:*互不影响
缺点:占内存较多

如果有两层,那深拷贝复制所有数据两份。所有数据是指:列表地址、上一级列表地址、数据地址等一切。

import copy    # 这就是准备深拷贝工具
list01 = [10, [20, 30]]
list02 = copy.deepcopy(list01) 
list02[0] = 100
list02[1][1] = 300
print(list02)  # [100, [20, 300]] 
print(list01)  # [10, [20, 30]]   #看,深拷贝做到了两个表*的互不影响!

我们提供整套的互联网整合营销托管服务,深度研究SEO技术在网络营销中的创新和运用,为内贸与外贸企业
量身定制高转化率的网站设计开发与SEO营销解决方案。
了解更多
领取优惠 电话咨询