ck1987 发表于 2018-8-7 09:01:55

Python深拷贝与浅拷贝

  浅拷贝就是对引用的拷贝,深拷贝就是对对象资源的拷贝。
  1.赋值
  1.赋值是将一个对象的地址赋值给一个变量,让变量指向该地址;
  2.修改不可变对象(字符串、数组等)需要给出新的空间;
  3.修改可变对象(列表、字典等)不需要给出新空间。
  2.浅拷贝
  浅拷贝(切片、工厂函数、对象的copy()方法、copy模块中的copy函数)仅仅复制了存储空间中内容的地址
  

>>> a = ['huhu', ]  
>>> b = a[:]
  
>>>
  

  
>>>
  

  
>>> a = 'haha'
  
>>> a.append(3)
  
>>> a
  
['haha', ]
  
>>> b
  
['huhu', ]
  

  从上面的代码可以看出,a和b没有修改前都是指向一个存储空间的,即他们的内容和地址都是相同的。当a修改时,因为字符串是不可变对象,所以需要给出新的存储空间来指定新的字符串,而列表就不用,所以b中字符串改变了,列表没变。(相当于一台电脑,a可以用,然后b也想用,a就把可以使用这台电脑的权限赋予b,这样ab公用这台电脑)
  3.深拷贝
  深拷贝完全拷贝了一个副本,存储空间内容和地址都不一样。
  深拷贝只有一种方式:copy模块中的deepcopy函数。
  

>>> from copy import deepcopy  
>>> a = ['huhu', ]
  
>>> b = deepcopy(a)

  
>>> [>  


  
>>> [>  

  
>>> a = 'haha'
  
>>> a.append(3)
  
>>> a
  
['haha', ]
  
>>> b
  
['huhu', ]
  

  从这里可以看出深拷贝是完全拷贝出来一个副本,重新给了一个存储空间赋值给b,内容和地址与a不同。(相当于一台电脑,a可以用,然后b也想用,a就给b买了一台一模一样的电脑使用,这样a用a的电脑,b用b的电脑)
页: [1]
查看完整版本: Python深拷贝与浅拷贝