python中浅谈深浅拷贝

本文详细介绍了Python中的深拷贝和浅拷贝概念,包括它们的区别和应用场景。通过实例解析了深浅拷贝在处理可变类型和不可变类型数据时的不同行为,并提供了练习题帮助读者巩固理解。
摘要由CSDN通过智能技术生成

 

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kun1280437633/article/details/79502865

#    要想了解深浅拷贝,首先要知道什么是深浅拷贝?


    深拷贝是对于一个对象所有层次的拷贝(递归)copy.deepcopy

    浅拷贝是对于一个对象的顶层拷贝;通俗的理解是:拷贝了引用,并没有拷贝内容.copy.copy

#    要想知道两者的区别,首先要知道什么是可变类型和不可变类型?
    
    不可变类型:整型,长整型,浮点数,复数,布尔,字符串,元组
    可变类型:列表,字典。

#    深浅拷贝有什么区别那?
    
    1、如果用copy.copy、copy.deepcopy对一个全部都是不可变类型的数据进行拷贝,那么它们结果相同,都是引用指向;

 

    2、如果拷贝的是一个拥有不可变类型的数据,即使元组是最顶层,那么deepcopy依然是深拷贝,而copy.copy还是指向

 

    3、基本上只要不是我们自已手动调用的deepcopy方法都是浅拷贝,切片拷贝字典拷贝都是浅拷贝,而有些内置函数可以生成拷贝(list),属于深拷贝:a = list(range(10))
b = list(a) 

#    练习题1

import copy

list1 = [1,2,['a','b'],('c','d')]

list2 = list1

list3 = copy.copy(list1)

list4 = copy.deepcopy(list1)

list1.append(3)

tuple1 = (10,10)

list1[2].append({100})

list1[3] = list1[3] + tuple1

dict1 = {}

dict1['1'] = 1111

list1[2].append(dict1)

print(list1)                     #(1)结果是:

print(list2)                     #(2)结果是:

print(list3)                     #(3)结果是:
print(list4)                     #(4)结果是:

 

详解:

#list1=list2,所以list1和list2指向同一个列表,两者内容一样              (1) [1,2,['a','b',{100},{'1':1111}],('c','d',10,10), 3]        (2) [1,2,['a','b',{100},{'1':1111}],('c','d',10,10), 3]

#list3=copy.copy(list1),浅拷贝,列表内列表复制的是引用,会随着list1内列表的内容改变而一起改变,元组不可变      (3) [1,2,['a','b',{100},{'1':1111}],('c','d')]

#list4=copy.deepcopy(list1),深拷贝,导致list4是独立全新复制的一份独立的内容,不会随着list1的变化而改变           (4) [1,2,['a','b'],('c','d')]

 

#  练习题2 

import copy

a = [11,22,33] 

b = [44,55,66]

c = [a,b]

d = copy.copy(c)

e = copy.deepcopy(c)

a.append(111)

c.append(55)

print(d)

print(e)

 

详解:

浅拷贝顶层拷贝d =  [[11, 22, 33, 111], [44, 55, 66], 55]

深拷贝递归拷贝e =  [[11, 22, 33], [44, 55, 66]]

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值