python中的深拷贝与浅拷贝

Python中的数据类型分为可变和不可变,如列表、字典和集合是可变的,字符串、数值和元组则是不可变的。在赋值时,可变类型复制的是引用,不可变类型则会创建新对象。浅拷贝仅复制对象本身,不复制引用对象,而深拷贝则创建全新对象,包括嵌套元素。copy模块提供了copy()进行浅拷贝,deepcopy()进行深拷贝。
摘要由CSDN通过智能技术生成

python变量类型

  • 可变数据类型:列表(list),字典(dictionary),集合(set)
  • 不可变数据类型:字符串(str),数值(Number),元组(tuple)

其中:
可变数据类型是指变量所指向的内存地址处的值是可以被改变的,也就是说可变类型在赋值的时候copy的是地址或者引用
python中不可变数据类型的定义为:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址

赋值

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

深拷贝和浅拷贝都是对原对象的拷贝,都会生成一个看起来相同的对象,本质区别就是拷贝出来的对象的「地址」是否与原对象一样,即就是对原对象的地址的拷贝,还是值的拷贝

深拷贝

  1. 对原对象的地址的拷贝,新拷贝了一份与原对象不同的地址的对象,修改原对象中的任何值,都不会改变深拷贝的对象的值

  2. 深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。

浅拷贝

  1. 对原对象的的拷贝,地址仍是指向原对象的地址,浅拷贝或者原对象的值发生变化,那原对象和浅拷贝对象的值都会随着被改变
  2. 创建新对象,其内容是原对象的引用

浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用

深拷贝(深度克隆):不仅复制对象的基本类,同时也复制原对象的对象,完全是新对象产生的

1.copy.copy 浅拷贝——只拷贝对象,不会拷贝对象的引用对象,不会拷贝原始对象的内部的

2.copy.deepcopy 深拷贝——拷贝对象的值类型,还拷贝了原始对象,而产生了一个新的对象,不仅仅只拷贝了原始对象的引用

出处:
原文链接:
python深拷贝和浅拷贝的区别
python深拷贝和浅拷贝

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值