两分钟理解深拷贝和浅拷贝,你我都可以做到。

2022-12-20 0 447

后面他们曾谈起条目从缓存的视角是怎样的?有兴趣的能高度关注我,看呵呵《python之从缓存随机存取的视角,自学并畅享list》段落的文本。那时他们仍然从缓存图起程,带你看呵呵缓存地底下的有关深复本和浅复本的这些奥妙。

深复本和浅复本

第一点,深复本和浅复本的说明

深复本:拷贝整座倚赖的表达式

浅复本:拷贝操作过程中只拷贝几层表达式,不能拷贝微细表达式所存取的表达式

第一点,深复本和浅复本的差别

深复本聚合的捷伊条目和原条目没有亲密关系

浅复本聚合的条目假如修正的并非第二层表达式,拷贝的条目会骤然发生改变,但假如发生改变的是第二层的表达式,新条目不能修正

第一点,深复本和浅复本的缓存图

1.1 深复本缓存图事例

模拟标识符:

import copy

list1=[1,[2,3]]

list2=copy.deepcopy(list1)

list1[1][0]=100

print list2[1][0]

两分钟理解深拷贝和浅拷贝,你我都可以做到。

上图表示的是list2的深复本实现

两分钟理解深拷贝和浅拷贝,你我都可以做到。

上图表示修正了list1[1][0]=100,此时对list2没任何影响。

两分钟理解深拷贝和浅拷贝,你我都可以做到。

所以list2[1][0]=2

1.2 标识符解读

两分钟理解深拷贝和浅拷贝,你我都可以做到。

2.1 浅复本缓存图事例

模拟标识符:

import copy

list1=[1,[2,3]]

list2=copy.copy(list1)

list1[1][0]=100

print list2[1][0]

两分钟理解深拷贝和浅拷贝,你我都可以做到。

上图表示的list2的浅复本

两分钟理解深拷贝和浅拷贝,你我都可以做到。

上图表示修正list1[1][0]=100,很容易知道list2[1][0]也骤然发生改变,但假如修正的是list[0]的值,list2[0]的值是不能发生变化的,因为拷贝的是几层的表达式,虽然list1和list2值都是1,但在缓存中的地址空间是不一样的,修正的list1[0],发生发生改变的是list1的第0号元素的地址,所以对list2没影响。

所以list2[1][0]=100

2.2 标识符解读

两分钟理解深拷贝和浅拷贝,你我都可以做到。

注意:

一、假如此时修正的是list[0]=100,list2[0]不能骤然发生改变,因为list2拷贝的是list1的几层地址。

两分钟理解深拷贝和浅拷贝,你我都可以做到。

二、通常所使用的的list2=list1[:],是浅复本。

两分钟理解深拷贝和浅拷贝,你我都可以做到。

【二哥有话说】

知识在于一点一滴的积累,自学也是一个循序渐进的操作过程。

高度关注我,小主会为大家分享更多职场干货和职场故事。

举报/反馈

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务