美文网首页
自动化测试面试官:浅拷贝和深拷贝有什么区别?

自动化测试面试官:浅拷贝和深拷贝有什么区别?

作者: 程序员阿沐 | 来源:发表于2021-03-20 14:22 被阅读0次

    那我们今天再来看一下这个面试问题:浅拷贝和深拷贝有什么区别?

    你如果说到Python,这个问题会经常被问到(方便理解我们就可以直接把它理解成Ctrl+C/Ctrl+V复制copy)当然在代码里面复制粘贴不仅仅是大家看到的,就是说在代码的世界里面,有很多的东西。

    就好像代码里面有一个is == 看起来这两个没有区别

    比如说

    a is b

    a==b


    看起来没什么区别,看起来相等。但其实它们有很大的区别。

    就好像我们的深复制和浅复制,也是一样的,你导入一个模块(copy)我定义一个a等于一个列表(1,2,3,4)

    然后我们去进行浅复制和深复制。

    浅复制

    b==copy里面的一个方法,

    b=copy.copy(a)#浅复制

    那这个是浅复制

    深复制

    C=copy .deepcopy(a)

    我们再来打印一下,abc

    打印出来都是一模一样的,没有毛病,这个时候大家看不出任何的效果。

    那我在前面有说,浅复制深复制他们最明显的区别就是:浅拷贝最基本的,没有拷贝子对象

    那什么叫子对象?

    所以说这个数据类型就

    a=[1,2,3,4]这个列表里面可不可以有列表?比如说我就又定义一个a一个b

    a=[1,2,3,4,[ 'a' , 'b ' ]]

    打印一下,其实还是一样的,因为它们是一个整体。

    那为什么说浅复制没有拷贝子对象呢,我们接着来看

    a.去做一个更改,列表可以去添加元素对吧吗,append

    这个列表a去添加一个元素,那这是第几个元素?那么索引就是4

    我的意思就是a=[1,2,3,4,[ 'a' , 'b ' c' ]]想要在里面再加一个c这样的元素,我们用代码

    a[4].append( 'c ')

    那我们再来运行看下效果 

    打印为什么还是三行都是一样的,问题在哪里,是因为在复制在前就把这个元素添加了,你要在复制之后。我去改一下代码顺序,这个时候效果就出来了,这个就是它们之间的区别。


    那它们之间的id是不是一样的呢,id肯定也是不一样的,一起来看一下它们之间的id。都是不同的对象了

    print(id(a))

    print(id(b))

    print(id(c))

    虽然都是复制过来的,但是它们已经不是同一个东西了,复制过来,打印adc,三个id都不一样了

    所以这就是它们之间一些基本的区别,这些代码大家可以在电脑上敲一遍,理解一下。

    加深印象:

    浅拷贝没有拷贝子对象,就是说我去浅拷贝,它们虽然是一个固定的对象,子对象是统一的,深度拷贝就是两者完全独立了

    只要记住深拷贝,你之前是这个样子

    我拷贝之后,不管你做什么增删改查,我还是这个样子

    完全独立了。

    那么浅拷贝就还没有完全独立,子对象还是之前的子对象,我这个子对象加了一个c元素,打印后能显示它添加的子元素,所以你记住深拷贝两者之间完全独立

    如果代码接触(敲)的少,看上去好像这个东西很简单,或者这个概念你读一遍也很简单,但是你需要多去敲一些这样的代码,深拷贝浅拷贝在很多语言里面都有,我们自动化,测试框架里面用得还是比较多的。

    1、点赞。防止以后找不到,想看的时候,在自己主页就能找到了,很方便;

    2、关注我。让我们成为长期关系,下一个视频会分享更多的硬核干货; 

    3、本文章学习资源,均可以免费分享。

    微信公号:程序员一凡。这样的好内容,里面还有近百篇。  谢谢你的支持!

    相关文章

      网友评论

          本文标题:自动化测试面试官:浅拷贝和深拷贝有什么区别?

          本文链接:https://www.haomeiwen.com/subject/vuhwcltx.html