python的拷贝(深拷贝和浅拷贝)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的拷贝(深拷贝和浅拷贝)相关的知识,希望对你有一定的参考价值。

  今天看了几篇关于python拷贝的博文,感觉不太清楚,所以我就自己做实验试一下,特此记录。

 

  拷贝是针对组合对象说的,比如列表,类等,而数字,字符串这样的变量是没有拷贝这一说的。

  实现拷贝有:

      1.工厂函数

      2.切片操作

      3.对象的copy方法

      4.copy模块的copy方法

 

  Notice:在python2.2之后将一些原来的内建函数和一些没有的内建函数转换成了工厂函数,而这些内建函数一些现在仍然有。

      工厂函数虽然貌似函数,但它是一个类。

      内建函数大概有这些(未详细考证):

                        int(),long(), float(), complex()   

                        str(), unicode(), basestring()       

                        list(), tuple()

                        type()

                        dict(), bool(),set(), frozenset(),object(),classmethod(),staticmethod(),super(),property(),file()

      

  • “基本”是指这些类型都是Python提供的标准或者核心类型;
  • “内建”是由于这些类型是Python默认就提供的;
  • “数据”是因为他们用于一般数据存储;
  • “对象”是因为对象是数据和功能的默认抽象;
  • “原始”是因为这些类型提供的是最底层的粒度数据存储;
  • “类型”是因为他们就是数据类型

 

        python默认的拷贝类型是浅拷贝

        浅拷贝就是对象是新的对象,但是内部的元素是对原对象的引用。请看图

        技术分享

      可以看出a,b,c,d其本身的id并不相同但是其内部元素的id却是一样的。

 

      而深拷贝就是对象与对象内部元素都与原对象没有任何关系,在拷贝的时候,对象被创建以后会递归拷贝原对象内部元素。

      技术分享

    是不是对象本身与对象内部元素的id都不同啊。

      

      

      

  

 

以上是关于python的拷贝(深拷贝和浅拷贝)的主要内容,如果未能解决你的问题,请参考以下文章

Java深拷贝和浅拷贝

Python高级详解 深拷贝和浅拷贝

Python高级详解 深拷贝和浅拷贝

如何实现数组深拷贝和浅拷贝?

深拷贝和浅拷贝的区别?

IOS 深拷贝和浅拷贝