Python中的深拷贝与浅拷贝

深拷贝与浅拷贝

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

不可变对象

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

可变对象

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

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

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

你可能感兴趣的:(python)