python的浅拷贝和深拷贝
#1.直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变
# alist = [1,2,3,["a","b"]]
# b = alist
# print(b)
# alist.append(5)
# print(b) #alist和b指向同一个列表
#2.copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变
# import copy
# alist = [1,2,3,["a","b"]]
# c = copy.copy(alist)
# print(c)
# alist.append(5)
# print(c)
# alist[3].append(5)
# print(c) #子对象被改变了
#深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
# import copy
# alist = [1,2,3,["a","b"]]
# d = copy.deepcopy(alist)
# print(alist)
# alist.append(5)
# alist[3].append("cccc")
# print(d)
# print(alist)
#不可变元组和可变列表的深拷贝与浅拷贝的区别
import copy
a = (1,2)
b = copy.copy(a)
c = copy.deepcopy(a)
print(b==c) #True
print(id(b) == id(c))#True
a = [3,4]
cc = copy.copy(a)
dd = copy.deepcopy(a)
print(cc == dd)#True
print(id(cc) == id(dd))#False
保持好奇心!

浙公网安备 33010602011771号