# 先说结论吧: # 浅拷贝: 拷贝的是对象的引用,如果原对象改变,相应的拷贝对象也会发生改变 # 深拷贝: 拷贝对象中的每个元素,拷贝对象和原有对象不在有关系,两个是独立的对象 # 浅拷贝 (不可变类型) import copy lis = [1,(1,8,5,5)] moo = copy.copy(lis) # 可以看出浅拷贝后的内存地址发生了变化 说明会在内存空间中重新开辟一片空间 print(lis is moo) print(id(lis) ,' ' ,id(moo)) # (1,8,5,5) 是元祖不可变得数据类型 # 当原数据中的深层数据发生改变时 lis[1] += (3,) print(lis,'原数据') print(moo,'浅拷贝后的数据') # 可以发现数据 拷贝后的数据并没有发生改变 # 打印出 : # False # 2213616019328 2213616019584 # [1, (1, 8, 5, 5, 3)] 原数据 # [1, (1, 8, 5, 5)] 浅拷贝后的数据 # 浅拷贝 (可变类型) import copy lis = [1,[1,8,5,5]] moo = copy.copy(lis) # 可以看出浅拷贝后的内存地址发生了变化 说明会在内存空间中重新开辟一片空间 print(lis is moo) print(id(lis) ,' ' ,id(moo)) # [1,8,5,5] 是列表可变得数据类型 # 当原数据中的深层数据发生改变时 lis[1] += (3,) print(lis,'原数据') print(moo,'浅拷贝后的数据') # 可以发现数据拷贝后的数据也跟着变了 # 打印出: # 2310742010560 2310742009728 # [1, [1, 8, 5, 5, 3]] 原数据 # [1, [1, 8, 5, 5, 3]] 浅拷贝后的数据 # False #深拷贝 import copy lis = [1,[1,8,5,5]] moo = copy.deepcopy(lis) # 可以看出深拷贝后的内存地址发生了变化 说明会在内存空间中重新开辟一片空间 print(lis is moo) print(id(lis) ,' ' ,id(moo)) # [1,8,5,5] 是列表可变得数据类型 # 当原数据中的深层数据发生改变时 lis[1] += (3,) print(lis,'原数据') print(moo,'深拷贝后的数据') # 可以发现 所谓深拷贝呢,就是重新分配一个内存空间(新对象),将原对象中的所有元素通过递归的方式进行拷贝到新对象中。 # 无论原数据怎么变化 他后不会影响到 拷贝后数据的变化 # 打印出: # False # 2453606099072 2453606102400 # [1, [1, 8, 5, 5, 3]] 原数据 # [1, [1, 8, 5, 5]] 深拷贝后的数据
深浅拷贝的区别(通俗易懂)
最新推荐文章于 2024-07-08 00:01:13 发布