面试必问系列---深浅拷贝✔️

本文探讨了Python中的深浅拷贝概念,包括赋值、不可变对象和可变对象的区别,以及浅拷贝和深拷贝的实现方式。通过实例展示了如何进行浅拷贝(copy.copy())和深拷贝(copy.deepcopy()),并解释了小整数对象的内存管理特性。了解这些知识点对Python程序员在面试中非常重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🐴 面试必问系列—深浅拷贝✔️

正值毕业季,大部分人会遇到走向社会的第一个难题—找工作面试,当你经历的面试多了,就会发现会有一些面试官经常问到的问题,比如:

问:你为什么会选择我们公司?

答:你们公司不是招人嘛😂

那么,我会在这个系列里讲讲那些经常被问到的面试题

现在先让我们一起来了解一下深浅拷贝 🎉

赋值

在Python中,赋值其实就是对象的引用

a = 9999
b = a
print(a)	#ouput:9999
print(b)	#ouput:9999
print(id(a))	#ouput:1869259054928
print(id(b))	#ouput:1869259054928

这样赋值后,b和a不仅在值上相等,而且是同一个对象,也就是说在堆内存中只有一个数据对象9999,这两个变量都指向这一个数据对象。从数据对象的角度上看,这个数据对象有两个引用,只有这两个引用都没了的时候,堆内存中的数据对象9999才会等待垃圾回收器回收。

需要注意的是,它和下面的赋值过程是不等价的:

a = 9999
b = 9999
print(id(a))	#ouput:1869266158672
print(id(b))	#ouput:1869266158768

虽然a和b的值相等,但他们不是同一个对象,这时候在堆内存中有两个数据对象,只不过这两个数据对象的值相等。

不可变对象

对于不可变对象,修改变量的值意味着在内存中要新创建一个数据对象

>>> a = 9999
>>> b = a
>>> id(a)
2625562451792
>>> id(b)
2625562451792
>>> a = 20000
>>> id(a)
2625564836944
>>> id(b)
2625562451792

在a重新赋值之前,b和a都指向堆内存中的同一个数据对象9999,但a重新赋值后,因为数值类型9999是不可变对象,不能在原始内存块中直接修改数据,所以会新创建一个数据对象保存20000,最后a将指向这个20000对象。这时候b仍然指向9999,而a则指向20000。

可变对象

对于可变对象,比如列表,它是在"原处修改"数据对象的。比如修改列表中的某个元素,列表的地址不会变,还是原来的那个内存对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值