python赋值、浅拷贝和深拷贝的区别

python赋值、浅拷贝和深拷贝的区别

首先需要了解下几个概念:

  • 不可变对象:一旦创建就不可修改的对象,包括字符串、元组tuple、数值类型 (int/float)
    该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。

  • 可变对象:可以修改的对象,包括列表list、字典dict、集合set
    该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。

  • 变量:是一个系统表的元素,拥有指向对象的连接空间

  • 对象:被分配的一块内存,存储其所代表的值

  • 引用:是自动形成的从变量到对象的指针

例:当我们写a='python’时,python解释器干的事情:

  1. 创建变量a

  2. 创建一个对象(分配一块内存),来存储值 ‘python’

  3. 将变量与对象,通过指针连接起来,从变量到对象的连接称之为引用(变量引用对象)!在这里插入图片描述](https://img-blog.csdnimg.cn
    在这里插入图片描述

赋值: 只是复制了新对象的引用,不会开辟新的内存空间。

浅拷贝: 拷贝父对象,不会拷贝对象的内部的子对象。在这里插入图片描述

深拷贝(deepcopy):拷贝了对象的所有元素,包括多层嵌套的元素。在这里插入图片描述

关于拷贝的警告

1、对于非容器类型,如数字,字符,以及其它“原子”类型,没有拷贝一说。产生的都是原对象的引用。

2、如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝
在这里插入图片描述
python数据结构可视化工具网页:http://pythontutor.com/live.html#mode=edit

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值