Python可变/不可变对象类型,赋值、浅拷贝、深拷贝(待更新浅拷贝,深拷贝)

python是一种面向对象的语言,python中对象包含三种基本要素:id(返回的是对象的地址)、type(返回的是对象的数据类型)及value(对象的值)。

 在python中对象赋值给变量实际上是对象的引用。当创建一个对象,然后把它赋值给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。

 

 

 

  • 可变对象:对象内容本身可变,改变对象内容,对象在内存中的地址不会被改变
  • 不可变对象:对象内容本身不可变,如果改变对象内容,那么对象在内存中的地址被改变;如果必须存储一个不同的值,则必须创建新的对象
  • 不可变对象:字符串、元组、数字(int、float)
  • 可变对象:数组、字典、集合

 --------------------------------------------------------------------------------------------------------------------------------

我们可以从上面的例子看到,对于可变对象来说,a变量的值更新之后,b变量的值也会随之更新(因为始终指向的内存地址没有变过)。那么假如我们只希望a变量的值变动,b变量的值不变动呢?就引入了拷贝(不可变对象,用赋值就可以实现该需求)。

一句话概括:浅拷贝会创建一个新对象,该新对象存储原始元素的引用

 可以看到内存地址是不同的,所以给 old_list 新增一个元素并不会同步让 new_list 也新增

面试题:浅拷贝、深拷贝的区别

  1. 浅拷贝和深拷贝只有在可变对象才会生效,不可变对象的赋值操作、浅拷贝、深拷贝的效果是一样的
  2. 浅拷贝会将对象复制生成一个新对象,但新对象仍然存储原始对象的引用,当原始对象是可变对象,然后修改它的值时,新旧对象会同时改变
  3. 深拷贝不仅会将对象复制生成一个新对象,且所有原始对象都会复制生成新对象,即使原始对象是可变对象,新对象存储的对象引用也是新的,所以改变旧对象的可变对象时,不会影响新对象

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值