Python中的深拷贝与浅拷贝

来源:互联网 发布:misumi软件 编辑:程序博客网 时间:2024/06/05 16:43

深拷贝与浅拷贝

  1. 深拷贝会拷贝源对象(拷贝后,二者从此无关系)
  2. 浅拷贝会新建一个对象,指向源对象。源对象变,拷贝的对象也会变(二者id值不同,但是指向的区域相同。相当于新建了一个指针)
  3. 如果浅拷贝的是列表。分为列表元素是可变对象和不可变对象两种情况:

不可变对象

#coding:utf-8s3 = [1,'hello',[1,2]]s4 = s3[:]s5 = list(s3)print id(3),id(4),id(5)'浅拷贝后更新不可变对象的值's3[0] = 0print s3print s4print s5
输出44333256 44333244 44333232[0, 'hello', [1, 2]][1, 'hello', [1, 2]][1, 'hello', [1, 2]]

可变对象

#浅拷贝后更新可变对象的值s5[2][1]='keek'prints3prints4print s5
输出[0, 'hello', [1, 'keek']][1, 'hello', [1, 'keek']][1, 'hello', [1, 'keek']]

要想复制时新建对象,可以使用下面几个方法

  • 切片
s2 = s1[:]
  • 工厂方法(工厂函数,list(),dict()等)
s2 = list(s1)
  • 使用copy模块中的copy函数
import copys2 = copy.copy(s1)#浅拷贝s2 = copy.deepcopy(s1)
原创粉丝点击