Python中的copy()和deepcopy()

最近在学习支持向量机的时候,看到了浅拷贝(copy)的用法,不是很理解,于是就把相关的知识点做了一下总结。

一、前言

Python关于对象复制有三种方式,直接复制、浅拷贝、深拷贝。不同的复制方式,带来的效果不同,如果不注意,很有可能出现莫名其妙的Bug。首先先明确几个概念:

  • 变量:是一个系统表的元素,拥有指向对象的连接空间
  • 对象:被分配的一块内存,存储其所代表的的值
  • 引用:是自动形成的从变量到对象的指针
  • 类型:属于对象,而非指针
  • 不可变对象:一旦创建就不可修改的对象,包括字符串、元组、数值类型
  • 可变对象:可以修改的对象,包括列表、字典、集合

具体来说,对一个不可变对象而言,该对象指向的内存中的值不能被改变。当改变某个值时,由于其所指的值不能被改变,相当于把原来的值复制一份再改变,这会开辟一个新的地址,,变量再指向新的地址。然而对于可变对象而言,该对象指向的内存中值可以改变。变量改变后,实际上是其所指的值发生了改变,并没有发生了复制行为,也没有开辟新的地址。
比如,在这里插入图片描述
Python解释器工作如下:
1.创建变量a
2.创建一个对象(分配一块内存),来储存值’python’
3.将变量与对象,通过指针连接起来,从变量到对象的连接称之为引用(变量引用对象)
图示:
在这里插入图片描述

二、直接复制

只是复制了新对象的引用,不会开辟新的内存空间,两个变量指向同一对象(同一内存地址)
对于可变对象:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值