2024年Python最全专题8 python之赋值、浅拷贝、深拷贝

文章讲述了Python中浅拷贝和深拷贝的概念,通过实例演示了它们在处理列表中不同数据类型的内存行为。浅拷贝只复制对象的引用,而深拷贝则完全复制对象及其所有子元素。
摘要由CSDN通过智能技术生成

print(alist)
print(blist)

[1,2,3,‘b_append’]

[1,2,3,‘b_append’]

修改任意一个list 两者的都发生变化 alist == blist


#### 浅拷贝


##### copy模块里面的copy方法实现



> 
> 通过copy模块里面的浅拷贝函数copy(),对原始变量指向的对象进行浅拷贝,然后浅拷贝生成的新对象赋值给新的变量  
>  浅拷贝会创建一个对象,对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)
> 
> 
> 


##### 对内部元素影响


* 不可变的类型,浅拷贝只是地址指向,不会开辟新空间
* 可变的数据类型,浅拷贝会开辟新的空间地址(仅仅是顶层开辟了新的空间,里层的元素地址还是一样的),进行浅拷贝
* 浅拷贝后,改变原始对象中可变类型元素的值,会同时影响拷贝对象,改变原始对象中不可变类型元素的值,只有原始类型受影响,操作拷贝对象对原始对象的也是同理



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)

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

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

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

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

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值