Python中浅复制和深复制的一点理解

来源:互联网 发布:淘宝内衣女模特叫名字 编辑:程序博客网 时间:2024/05/17 08:03
最近由于公选课的原因在学习Python。最初接触Python的时候,感受最深刻的就是这个语言的强大,不需要声明数据类型,自动转换,以及强大的库,最后也就理解了为什么有些程序员感慨Python一行程序可以解决C++、Java几十行代码才能解决的问题。但是,强大的语言只能让我们在实际使用的时候更加便捷,而要想真正的用好这个工具,我觉得还是要清楚其背后的运行机制!今天在学习Python的字典的时候遇到了copy函数和deepcopy这两个函数,然后就涉及到了相互赋值的问题!开始的时候我恨不能理解浅复制的含义,去百度上查找相关的资料发现都很抽象,然后就自己思考了一下,结合相关的说法,找到了一中很符合的解释。Python中一切皆为对象,那么所有的数据类型就都有可能被引用。在Python中,类似于 a=b这种赋值其实并不是真正地将b的值付给了a,而是将b所指向的地址给了a,换而言之,a和b实际上指向的是同一个内存单元,所以只要b的值改变,a的值也会随之改变。我刚开始的时候打算去验证一下子,所以将a的值改变,发现b的值并不变,这是因为改变a的值,势必要赋值给a,例如a= 1,但是Python中任何东西都是对象,所以这就相当于把一个新的对象赋给了a,那么自然a和b就不一样了。其实,这个问题很好验证,只需要打印出a和b的地址就会发现a和b是指向同一个地址的!有了上面的铺垫,那么在字典中的copy和deepcopy就不难理解了,在自己实验的时候我发现只有当字典中有列表这种引用类型的时候,改变列表的值,才会改变浅复制之后的变量,按照之前的理解,copy并不是真的copy了列表,而是类似于上述的a=b的赋值一样,当我们试图去改变b的时候,a自然会随之改变。当然,这只是我自己的理解,我现在还只是处在初学阶段,所以这只是我个人的一种理解,并不能确保一定正确!