赋值、浅拷贝、深拷贝

时间:2021-01-14 19:48:27

原文:http://www.cnblogs.com/wilber2013/p/4645353.html

Python中对象的赋值都是进行对象引用(内存地址)传递

  • 使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用.
  • 如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝
  • 对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有被拷贝一说
  • 如果元祖变量只包含原子类型对象,则不能深拷贝

赋值

  1. 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )
  2. 修改不可变对象(strtuple)需要开辟新的空间
  3. 修改可变对象(list等)不需要开辟新的空间

赋值、浅拷贝、深拷贝

浅拷贝

仅仅复制了容器中元素的地址

赋值、浅拷贝、深拷贝

 

深拷贝

完全拷贝了一个副本,容器内部元素地址都不一样

赋值、浅拷贝、深拷贝