copy.copy()与copy.deepcopy()的详解

copy.copy()

元组和列表调用这个方法效果也不一样。

元组的效果:

a = [1,2,3]
b = [4,5,6]
c = (a,b)
e = copy.copy(c)

可以看到:e和c是指向了同一个地址。原因:元组是不可变类型,拷贝出来没有什么用,所以copy有个功能,可以判断这个东西是可变还是不可变类型,如果是可变类型,当时用copy.copy()对于可变类型的只会深拷贝一层,不可变类型的话,一层都不拷贝(浅拷贝)。



列表的效果:


可以看到:c和e指向了不同的地址,但是c和e里面的内容是指向了相同的地址

copy.deepcopy()

这个是深拷贝,并且是递归的形式拷贝的

元组的效果:



可以看到:它是把所有的内容都进行了了深拷贝

列表的效果:


可以看到:它是把所有的内容都进行了了深拷贝

总结:copy.deepcopy()在元组和列表的嵌套上的效果是一样的,都是进行了深拷贝(递归的)



  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深拷贝和浅拷贝是在对象复制过程中常用的两种方式,它们的区别在于复制后的对象与原始对象之间的关系。 浅拷贝(Shallow Copy)是创建一个新对象,该对象与原始对象的元素是对原始对象中元素的引用。换言之,复制后的对象与原始对象共享内部对象的引用。当修改原始对象中的可变元素时,这些修改也会反映在复制后的对象中。 深拷贝(Deep Copy)则是创建一个全新的独立对象,复制后的对象与原始对象完全独立,互不影响。深拷贝会递归地复制原始对象及其内部所有可变对象,而不仅仅是引用。 举个例子来说明: ```python import copy # 原始对象 original_list = [1, 2, [3, 4]] # 浅拷贝 shallow_copy = copy.copy(original_list) # 深拷贝 deep_copy = copy.deepcopy(original_list) # 修改原始对象中的可变元素 original_list[0] = 10 original_list[2].append(5) print(original_list) # 输出: [10, 2, [3, 4, 5]] print(shallow_copy) # 输出: [10, 2, [3, 4, 5]] print(deep_copy) # 输出: [1, 2, [3, 4]] ``` 在上面的例子中,原始对象是一个列表 `original_list`,其中包含一个整数和一个列表。通过浅拷贝 `copy.copy()` 和深拷贝 `copy.deepcopy()` 分别创建了复制对象 `shallow_copy` 和 `deep_copy`。 当我们修改原始对象的第一个元素和第三个元素的子列表时,可以看到浅拷贝对象也受到了影响,而深拷贝对象保持不变。 因此,在需要创建独立的对象副本且避免修改原始对象时,深拷贝是更安全和可靠的选择,而浅拷贝则更适合在一些特定场景下节省内存或共享数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值