首页 > 编程语言 >python中copy和deepcopy详细区别

python中copy和deepcopy详细区别

时间:2023-01-30 22:11:52浏览次数:46  
标签:python 对象 复制 print deepcopy copy id

 

python中copy和deepcopy

 

  1. 在 python 中,标识一个对象唯一身份的是:对象的id(内存地址),对象类型,对象值。
  2. deepcopy是真正意义上的复制,深拷贝,被复制对象完全复制一遍作为独立的新个体,新开辟一块空间。
  3. 等于赋值浅拷贝,不会产生独立对象,只是对原有数据块打上新标签,其中一个标签改变,数据块就会变化。
  4. copy仅拷贝对象本身,浅拷贝不会对其中的子对象进行拷贝,对子对象进行修改也会随着修改,
  5. 对于不可变类型(元组、数值,字符串等)为浅拷贝,对象的id值与浅复制原来的值相同
  6. 对于可变类型(列表、字典等)为深拷贝
    1. 复制的对象中无复杂子对象,即列表中不嵌套列表,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同
    2. 复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表)如果改变复杂子对象的值(列表中的值)会影响浅复制的值。
a = [1,2,3,[4,5],1]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)

a.append(9)
a[3].append(6)

print(a) 	#[1, 2, 3, [4, 5, 6], 1, 9]
print(b)	#[1, 2, 3, [4, 5, 6], 1, 9]
print(c)	#[1, 2, 3, [4, 5, 6], 1]
print(d)	#[1, 2, 3, [4, 5], 1]

print(id(a))	#4594148288
print(id(b))	#4594148288
print(id(c))	#4594455328
print(id(d))	#4592688496


x = 'Hello World'
y = x
z = copy.copy(x)
w = copy.deepcopy(x)
print(id(x)) #4617118576
print(id(y)) #4617118576
print(id(z)) #4617118576
print(id(w)) #4617118576
 

标签:python,对象,复制,print,deepcopy,copy,id
From: https://www.cnblogs.com/clark1990/p/17077374.html

相关文章