专题8 python之赋值、浅拷贝、深拷贝

浅拷贝会创建一个对象,对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)

对内部元素影响
  • 不可变的类型,浅拷贝只是地址指向,不会开辟新空间
  • 可变的数据类型,浅拷贝会开辟新的空间地址(仅仅是顶层开辟了新的空间,里层的元素地址还是一样的),进行浅拷贝
  • 浅拷贝后,改变原始对象中可变类型元素的值,会同时影响拷贝对象,改变原始对象中不可变类型元素的值,只有原始类型受影响,操作拷贝对象对原始对象的也是同理
import copy
#定义alist,并拷贝给blist
alist = [1,2,3,[6,7,8]]
blist = alist.copy()

#查看alist 与 blist内存地址
print('alist与blist的地址分别为')
print(id(alist))
print(id(blist))
# alist与blist的地址分别为
# 2056373019592
# 2056373060616

#查看alist与blist内元素的地址
print('alist与blist内元素的地址分别为')
print([id(x) for x in alist])
print([id(x) for x in blist])
# alist与blist内元素的地址分别为
# [140710155244576, 140710155244608, 140710155244640, 2056373019336]
# [140710155244576, 140710155244608, 140710155244640, 2056373019336]

print('修改alist的内元素的值')
alist.append('a\_append')
print(alist)
print(blist)
# 修改alist的内元素的值
# [1, 2, 3, [6, 7, 8], 'a\_append']
# [1, 2, 3, [6, 7, 8]]

print('修改alist中的列表元素的值')
alist[3].append('a\_second\_append')
print(alist)
print(blist)
#修改alist中的列表元素的值
# [1, 2, 3, [6, 7, 8, 'a\_second\_append'], 'a\_append']
# [1, 2, 3, [6, 7, 8, 'a\_second\_append']]

深拷贝
copy模块里面的deepcopy方法实现
  • 通过copy模块里面的深拷贝函数deepcopy(),对原始变量指向的对象进行深拷贝,然后深拷贝生成的新对象赋值给新的变量
  • 跟浅拷贝类似,深拷贝也会创建一个新的对象

对于对象中的元素,深拷贝都会重新生成一份,而不是简单的使用原始元素的引用(内存地址)
经过深拷贝后,原始对象和拷贝对象所有的子元素地址都是独立的了

import copy

#定义alist,并深度拷贝给blist
alist = [1,2,3,[6,7,8]]
blist = copy.deepcopy(alist)

#查看alist 与 blist内存地址
print('alist与blist的地址分别为')
print(id(alist))
print(id(blist))
# alist与blist的地址分别为
# 2612203103176
# 2612203144200

#查看alist与blist内元素的地址
print('alist与blist内元素的地址分别为')
print([id(x) for x in alist])
print([id(x) for x in blist])
# alist与blist内元素的地址分别为
# [140710155244576, 140710155244608, 140710155244640, 1993019826888]
# [140710155244576, 140710155244608, 140710155244640, 1993020930824]

print('修改alist的内元素的值')
alist.append('a\_append')
print(alist)
print(blist)
# 修改alist的内元素的值
# [1, 2, 3, [6, 7, 8], 'a\_append']
# [1, 2, 3, [6, 7, 8]]

print('修改alist中的列表元素的值')
alist[3].append('a\_second\_append')
print(alist)
print(blist)
# 修改alist中的列表元素的值
# [1, 2, 3, [6, 7, 8, 'a\_second\_append'], 'a\_append']
# [1, 2, 3, [6, 7, 8]]

附一张图片,我觉得这个很直观
在这里插入图片描述

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值