这个是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
浅拷贝时,当“真身”发生改变时,“替身"中的可变元素会跟着改变,不可变元素不会动。
深拷贝时,当”真身“发生改变,“替身”中的可变元素和不可变元素均不会跟随变化。
可以理解为:深拷贝发生时,所有的元素都产生替身。之所以不可变的元素没有在拷贝时产生替身,是因为反正只要想改变它,也会自动“分身”。而浅拷贝发生时,所有的元素都不是“替身”,都是“真身”。只不过由于不可变元素发生改变时的特殊性,而导致了改变。
网友评论