Python的拷贝

  

 


Python中的拷贝有两种,一种是浅拷贝,一种是深拷贝,还有一种常用来比较深浅拷贝的区别的方式——赋值,他们的区别是什么呢?

  赋值:

    赋值是后的变量指向的内存地址与原变量的内存地址是同一个,相当于给这个内存地址了创建一个快捷方式,我们来看代码

      

    运行后的结果是:

      

    我们可以看到,li1和li2的值是一样的,他们的内存地址也是一样的,所以如果改变了li1的值,那么li2的值就会随之改变,相应地,如果改变了li2的值,li1的值也会随之改变

      

 浅拷贝:

   浅拷贝是将第一层的数据拷贝到另一个内存地址,我们来看代码:

     

    那么这个拷贝第一层的数据是什么意思呢?来看第二段代码:

    

    在修改了嵌套的列表中的值后,浅拷贝的li2中的相应的值也发生了改变,但是我们修改外层列表中的元素时,li2的值并没有发生改变,这就是浅拷贝

 深拷贝:

   深拷贝是将原变量中的所有数据都拷贝到另一个内存地址中去,代码如下:

    

   运行后的结果如下:

     

   可以看出,深拷贝后,不管原数值怎么改变,都不会影响拷贝后的结果

 区别:

 赋值:赋值后的变量指向的是该数据的内存地址,如果该数值发生改变,则被赋值变量的数值也随之改变
 浅拷贝:浅拷贝拷贝的是变量中第一层的数据到另一个内存地址,更深层的数据不拷贝,如果原数据中深层次的数据发生改变,
     拷贝后的数值也会发生改变
 深拷贝:深拷贝拷贝的是变量中的所有数据到另一个内存地址,不管原数据怎么改变,深拷贝后的数值都不会变

 

  

posted @ 2018-08-02 13:32  Sorcerer  阅读(169)  评论(0)    收藏  举报