Python深拷贝和浅拷贝详解,深拷贝 浅拷贝 python
本文介绍了Python中深度复制和浅层复制的区别,并通过示例代码进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
首先我们知道Python中有六种标准数据类型,分为可变和不可变。不可变:数(number),字符串(String),元组(Tuple)。可以变:(列表),字典(词典),设置(设置)。
浅拷贝
更改原始对象中可变元素的值也会影响复制的对象。
更改原始对象中不可变元素的值不会影响复制的对象。
代码演示
导入副本
#定义一个列表,其中第一个元素是可变类型。
list1=[[1,2],费,66];
#制作简单副本
list 2=copy . copy(list 1);
#对象地址是否相同。
打印(id(list 1));
打印(id(list 2));
#结果:不同
46177816
46177936
#第一个元素地址是否相同。
print(id(list 1[0]);
print(id(list 2[0]);
#结果:相同
46240432
46240432
#第二个元素的地址是否相同。
print(id(list 1[1]);
print(id(list 2[1]);
#结果:相同
45547328
45547328
#更改第一个值以查看复制对象的更改。
list 1[0][0]=2;
打印(列表2);
#结果:复制的对象发生变化。
[[2,2],《费》,66]
#更改第二个值以查看复制对象的更改。
list 1[1]= ge ;
打印(列表2);
# Result:复制的对象没有改变。
[[2,2],《费》,66]
深拷贝
深度复制除了顶层复制之外,还会复制子元素。
深度拷贝后,原始对象和拷贝对象的所有可变元素地址都不相同。
代码演示
导入副本
#定义一个列表,其中第一个元素是可变类型。
list1=[[1,2],费,66];
#深层副本
list 2=copy . deepcopy(list 1);
#对象地址是否相同。
打印(id(list 1));
打印(id(list 2));
#结果:不同
46177816
46177936
#第一个元素地址是否相同。
print(id(list 1[0]);
print(id(list 2[0]);
#结果:不同
49123856
49588784
#第二个元素的地址是否相同。
print(id(list 1[1]);
print(id(list 2[1]);
#结果:相同
45547328
45547328
#更改第一个值以查看复制对象的更改。
list 1[0][0]=2;
打印(列表2);
# Result:复制的对象没有改变。
[[1,2],《费》,66]
#更改第二个值以查看复制对象的更改。
list 1[1]= ge ;
打印(列表2);
# Result:复制的对象没有改变。
[[1,2],《费》,66]
这就是这篇关于Python中深度复制和浅层复制的文章。希望对大家的学习有所帮助,也希望大家能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。