美文网首页
python中的赋值,深浅拷贝

python中的赋值,深浅拷贝

作者: 小双2510 | 来源:发表于2017-11-08 00:47 被阅读0次

    这个是Python中的比较重要的知识点。

    自己画了一个知识导图,下面再详细解释。

    Screen Shot 2017-11-07 at 11.39.56 AM.png

    本文有三个方面的问题要说明:

    1.

    有的帖子上说“python是没有变量的,只有标签”,对这句话的理解,应该是这样:


    Screen Shot 2017-11-07 at 11.25.10 AM.png

    2.

    关于python的可变对象和不可变对象,请看这个帖子里的解释
    http://www.jianshu.com/p/c5582e23b26c
    可变对象,在被修改时,不发生“分身”或者说“复制”,直接得到修改;
    不可变对象,在被修改时,发生“分身”,被修改的是他的“替身”,而不是他自己;

    这里直接把讲解的特别好的炸鸡叔的帖子印过来:


    Screen Shot 2017-11-07 at 11.50.54 AM.png
    Screen Shot 2017-11-07 at 11.51.12 AM.png
    Screen Shot 2017-11-07 at 11.51.27 AM.png
    Screen Shot 2017-11-07 at 11.51.37 AM.png
    Screen Shot 2017-11-07 at 11.51.47 AM.png
    Screen Shot 2017-11-07 at 11.51.57 AM.png
    Screen Shot 2017-11-07 at 11.52.15 AM.png

    3.

    浅拷贝和深拷贝:可以这么理解,首先只有可变的对象才可以深拷贝;在深拷贝一个可变对象的时候,他内部的可变元素被复制--“分身”,他内部的不可变元素不被复制--“不分身”。
    图片来源:http://www.cnblogs.com/wilber2013/p/4645353.html

    赋值:


    Screen Shot 2017-11-07 at 11.57.53 AM.png

    浅拷贝:


    Screen Shot 2017-11-07 at 11.58.05 AM.png
    深拷贝:
    Screen Shot 2017-11-07 at 11.58.18 AM.png

    还可以进一步参考这篇文章:http://www.jianshu.com/p/efa9dd51f5cc
    浅拷贝时,当“真身”发生改变时,“替身"中的可变元素会跟着改变,不可变元素不会动。

    Screen Shot 2017-11-07 at 12.12.50 PM.png

    深拷贝时,当”真身“发生改变,“替身”中的可变元素和不可变元素均不会跟随变化。

    Screen Shot 2017-11-07 at 12.12.57 PM.png
    可以理解为:深拷贝发生时,所有的元素都产生替身。之所以不可变的元素没有在拷贝时产生替身,是因为反正只要想改变它,也会自动“分身”。而浅拷贝发生时,所有的元素都不是“替身”,都是“真身”。只不过由于不可变元素发生改变时的特殊性,而导致了改变。

    相关文章

      网友评论

          本文标题:python中的赋值,深浅拷贝

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