简介深浅拷贝

深浅拷贝
python 直接赋值,浅拷贝和深拷贝
直接赋值
其实就是对象的引用 (可以理解成浅拷贝)
浅拷贝:
拷贝父类,不会 拷贝父类对象的 内部子对象

重要 使用列表内置的copy方法,是将新列表中的元素指向了与原列表相同的内存空间。但是,如果列表中嵌套了列表,拷贝后的列表中嵌套的列表元素指针,指向原列表中嵌套列表的整体地址,而不是指向嵌套列表中元素的内存地址。

深拷贝:
完全拷贝了父类对象和其子对象
实例A
# 浅拷贝 a = {1:[1,2,3]} b= a.copy() # a={1:[1,2,3]} b={1:[1,2,3]} a和b的地址也不一样 a[1].append(55) # a={1:[1,2,3,55]} b={1:[1,2,3,55]} # 浅拷贝不拷贝父类对象的子对象

实例B
# 深拷贝 ,导入copy模块 import copy a = {1:[1,2,3]} c = copy.deepcopy(a) # a= {1:[1,2,3]}, c={1:[1,2,3]} a[1].append(99) # a = {1:[1,2,3,99]} # c = {1:[1,2,3]} # 深拷贝完全拷贝了父类对象和父类对象的子对象

实例C(综合)
import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a#赋值,传对象的引用 c = copy.copy(a)#对象拷贝,浅拷贝 d = copy.deepcopy(a)#对象拷贝,深拷贝 a.append(5)#修改对象a a[4].append('c')#修改对象a中的['a', 'b']数组对象# 输出结果 a=[1,2,3,4,['a','b','c'],5] b=[1,2,3,4,['a','b','c'],5] c=[1,2,3,4,['a','b','c']] d=[1,2,3,4,['a','b']]

【简介深浅拷贝】深浅拷贝对元组的实例
import copy a = (1,2,3) b = copy.copy(a) c = copy.deepcopy(a) (id(a),id(b),id(c)一样的)# 如果元组里面有可变的列表时 a = (1,2,[3,4,5]) b = copy.copy(a) c = copy.deepcopy(a) a[2].append(99) # 输出 a=(1,2,[3,4,5,99]) b=(1,2,[3,4,5,99]) c=(1,2,[3,4,5]) # 如果元组中的子对象有可变类型,是引用对对方的地址,在浅拷贝的时候回随之改变

    推荐阅读