python的深浅拷贝
2021-03-29 21:27
标签:一起 初始 相同 div pen 没有 数据 引用 就是 直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 (1)当a中没有子对象时 更新值a= [1, 2, 3, 4, 5, ‘aa‘] 此时,浅拷贝和深拷贝没有区别,都跟改变之前一样 (2)当a中有子对象时,子对象为可变数据类型(例如列表和字典) 更新值a= [1, 2, 3, 4, {1: ‘hello‘, 2: ‘cc‘, 3: ‘ddd‘}, 5] 浅拷贝中: 子对象跟着一起更新了,但是5没有被添加进来 深拷贝中:还是跟a的初始值一样 可变数据类型:列表,字典,集合 不可变数据类型:数字,字符串,元组 python的深浅拷贝 标签:一起 初始 相同 div pen 没有 数据 引用 就是 原文地址:https://www.cnblogs.com/polly-chen/p/13599613.html
import copy
a = [1, 2, 3, 4, "hello"]
b = a #直接赋值
c = copy.copy(a) #浅拷贝
d = copy.deepcopy(a) #深拷贝
a.append(5)
a.remove("hello")
a.append("aa")
#a[4].append(‘c‘)
print("更新值a=",a)
print("赋值 b=",b) #赋值时,当a改变时,b也改变
print("浅拷贝c=",c) #a和b是独立的对象,但是子对象指向同一个对象,如果子对象是一个列表,那么列表里的值会和a的相同
print("深拷贝d=",d) #a和b完全是独立的对象,子对象父对象都是独立的
运行结果:
赋值 b= [1, 2, 3, 4, 5, ‘aa‘]
浅拷贝c= [1, 2, 3, 4, ‘hello‘]
深拷贝d= [1, 2, 3, 4, ‘hello‘]import copy
a = [1, 2, 3, 4, {1:"hello",2:"cc"}]
b = a #直接赋值
c = copy.copy(a) #浅拷贝
d = copy.deepcopy(a) #深拷贝
a.append(5)
a[4][3] = "ddd"
#a[4].append(‘c‘)
print("更新值a=",a)
print("赋值 b=",b) #赋值时,当a改变时,b也改变
print("浅拷贝c=",c) #a和b是独立的对象,但是子对象指向同一个对象,如果子对象是一个列表,那么列表里的值会和a的相同
print("深拷贝d=",d) #a和b完全是独立的对象,子对象父对象都是独立的
运行结果:
赋值 b= [1, 2, 3, 4, {1: ‘hello‘, 2: ‘cc‘, 3: ‘ddd‘}, 5]
浅拷贝c= [1, 2, 3, 4, {1: ‘hello‘, 2: ‘cc‘, 3: ‘ddd‘}]
深拷贝d= [1, 2, 3, 4, {1: ‘hello‘, 2: ‘cc‘}]