python中的深拷贝和浅拷贝,Python浅拷贝和深拷贝的区别

  python中的深拷贝和浅拷贝,Python浅拷贝和深拷贝的区别

  定义:在Python中,对象的赋值实际上是对对象的引用。当创建一个对象并将其赋给另一个变量时,python并没有复制对象,只是复制了对象的引用。

  浅拷贝:最外面的对象本身被拷贝,内部元素只是一个引用。即复制一次对象,但不复制对象中引用的其他对象。

  深层复制:外围元素和内部元素都被复制,对象本身不被引用。也就是再次复制对象,我会复制对象中引用的其他对象。

  几个术语的解释:1。变量:系统表的一个元素,它有一个指向对象的连接空间。

  2.对象:为存储它所代表的值而分配的内存块。

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

  4.注意:类型(int类型,long类型(python3去掉了long类型,只留下int类型的数据))属于对象,不属于变量。

  5.不可变对象:一旦创建就不能修改的对象,包括字符串、元组和数字。

  6.可变对象:可以修改的对象,包括列表和字典。

  适用范围:1。切片可以应用于列表、元组和字符串,但不能应用于字典。

  2.明拷贝和暗拷贝可以应用于序列(列表、元组、字符串)和字典。

  深度复制的作用:1、减少内存的使用。

  2.以后在清理、修改或入库数据时,做好原始数据的备份,防止数据修改后发现原始数据。

  对于不可变对象的深度副本:不可变对象类型,说它没有被复制,即使使用了深度副本,也和检查id是一样的。如果它被重新分配,它只会创建一个新的对象并替换旧的对象。

  总之,一个不可变类型,无论是深度复制还是轻度复制,其地址值都与复制值相同。

  a=(1,2,3)print(=====第一种=轻拷贝====)b=a Print(a)Print(b)Print(id(a))Print(id(b))Print(===另一种拷贝轻拷贝==) Print (id (b)) print (====深拷贝==)b=copy . deepcopy(a)Print(a)Print(b)Print(id(a))#结果如下:====3) 281452235952281452235952====另一种轻抄===(1,2,3) (1,2,3) 281452235952281452335952===深抄===

  复制:值相等,但地址不相等。

  值相等,但地址不相等。

  a=[1,2,3]print(=====第一种轻拷贝====)b=a Print(a)Print(b)Print(id(a))Print(id(b))Print(====另一种轻拷贝==)Print(id(b))Print(====Deep copy==)b=copy . Deep copy(a)Print(a)Print(b)Print(id(a))#结果如下:====3]200769632154444

  2.不可变类型的对象对明拷贝和暗拷贝没有影响,最终地址值和value都是相等的。

  3.变量类型:

  =light copy:值相等,地址相等。

  复制:值相等,但地址不相等。

  值相等,但地址不相等。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: