python深拷贝与浅拷贝
Posted Smart1san
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python深拷贝与浅拷贝相关的知识,希望对你有一定的参考价值。
一、定义
浅拷贝:创建一个新对象,它包含的是对原始对象中所包含想的引用。(若引用的方式修改其中一个对象,另外一个也会跟着改变)
深拷贝:创建一个新对象,并递归的赋值它所包含的对象。(修改其中一个,另外一个是不会跟着变化的)
二、应用
浅拷贝:1.完全切片方法
2.工厂函数,如 list()
3. copy 模块中的 copy() 函数
深拷贝:1. copy 模块下的 deep.deepcopy() 函数
三、实例
1.浅拷贝
1 import copy 2 3 list1 = [1, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 4 list2=list1.copy() 5 # print(id(list1)) # 1710452450504 6 # print(id(list2)) # 1710452451784 7 # 说明list2是在内存中独立出一个新的空间 8 9 print(list2) # [1, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 10 # list1[0]=‘a‘ # 修改了list1最外层(第一层)的值 11 # print(list1) # [‘a‘, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 12 # print(list2) # [1, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 13 # # list2第一层的信息并不受到list1的影响 14 # # 并不表示内层的信息也全部复制了。 15 16 # list2[0]=‘a‘ # 修改list2最外层(第一层)的值 17 # print(list1) # [1, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 18 # print(list2) # [‘a‘, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 19 # # 证实了list2和list1的第一层信息之间是没有相互影响的 20 # # 这一步也不能证实内存的信息是否是深度复制 21 22 # list1[3][0]=1 # 修改list1内层的值 23 # print(list1) # [1, 2, 3, [1, ‘b‘, ‘c‘]] 24 # print(list2) # [1, 2, 3, [1, ‘b‘, ‘c‘]] 25 # # list1内层的值改变,list2内层的值也跟着改变 26 # # list1和list2之间可能还存在着某种联系 27 28 # list2[3][0]=1 # 修改了list2内层的值 29 # print(list1) # [1, 2, 3, [1, ‘b‘, ‘c‘]] 30 # print(list2) # [1, 2, 3, [1, ‘b‘, ‘c‘]] 31 # # 证实list1和list2之间还是有互相影响的 32 # # 应该是list2的内层数据信息的内存地址是指向list1的内层数据信息的地址
2.深拷贝
1 import copy 2 3 list1 = [1, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 4 list2=copy.deepcopy(list1) 5 # 修改最外层的值其结果与浅拷贝是一致的 6 7 # list1[3][0]=1 8 # print(list1) # [1, 2, 3, [1, ‘b‘, ‘c‘]] 9 # print(list2) # [1, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 10 # # list1和list2是没有相互影响的 11 12 # list2[3][0]=1 13 # print(list1) # [1, 2, 3, [‘a‘, ‘b‘, ‘c‘]] 14 # print(list2) # [1, 2, 3, [1, ‘b‘, ‘c‘]] 15 # # list2和list1是没有相互影响的 16 17 # 证实了深拷贝是递归的复制所有数据信息的
以上是关于python深拷贝与浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章