Python的深拷贝与浅拷贝【代码演示+底层讲解】

Python深浅拷贝浅析

我们先直接来看下
创建两个字符串,a,b 字面量值都一致
在Python解释器中,是对于变量所对应的值比较

a = "python 123"
b = "python 123"
if a== b:
    print("好久不见")

结果展示
我们创建一个变量c ,将a 的值赋给c,用c is a判断是否是同一个变量,运行看结果

c = a
print(c)
print(c is a)

在这里插入图片描述
从结果来看,a 和c都是指向内存空间中的同一个地址的值

  • 我们在通过一个迭代对象进行深浅拷贝的进一步理解
  • 我们创建了一个列表a ,并将a 赋值给b
  • 我们判断a、b是否是同一个对象,应该是的吧,可以参照上边的例子
a = [1,2,3,4]

b =a

print("a :{0} \t b:{1}".format(a, b))
print(b is a)

在这里插入图片描述
结果显示也是

  • 我们现在对a的第一个元素进行修改
  • 将[1,2,3,4] 的第一个元素1 ⇒ \Rightarrow 11
a[0] = 11
print("--------------------")
print("a:{0}".format(a))
print("b:{0}".format(b))

结果

在这里插入图片描述

但是我们在日常使用中可能只是想操作a,但是b不想随着我们的操作而变化,这时候我们就需要深拷贝,制作一个操作对象的副本进行变量赋值

  • 深度拷贝,使用对象[可变对象]的copy()方法进行处理【字符串是不可变对象】
  • 对于b我们进行深度拷贝,并修改a列表中 [ 11 , 2 , 3 , 4 ] [11,2,3,4] [11,2,3,4]将2,3,4修改为22,33,44,查看b的值以及a、b是否是同一个对象
# 深度拷贝,使用copy() 方法生成副本并赋值给b
b = a.copy()
a[1:] = [22,33,44]

print("**********************")
print("a:{0}".format(a))
print("b:{0}".format(b))
print(a is b)
结果如下

在这里插入图片描述

总结

深度拷贝就是调用对象的copy方法进行对象的副本创建并赋值的一个操作。关于Python的源码的一些逻辑,学习过java的小伙伴可以看看,可Java的逻辑有很多相似之处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值