Python详细讲解浅拷贝与深拷贝的使用

作者:Flyme 时间:2023-01-01 03:00:10 

1.变量的赋值操作

只是多生成了一个变量,实际上还是指向同一个对象

# -*- coding: utf-8 -*-
class CPU:
   pass
class Disk:
   pass
class Computer:
   def __init__(self, cpu, disk):  # 给对象的实例属性进行初始化
       self.cpu = cpu
       self.disk = disk
# 变量的赋值
cp1 = Computer(cpu='CPU', disk='DISK')  # 创建CPU类的实例对象
cp2 = cp1  
# 变量的赋值,一个对象的实例采用两个变量存储,实际上还是指向一个对象
print(cp1, id(cp1))
print(cp2, id(cp2))

Python详细讲解浅拷贝与深拷贝的使用

赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

2.浅拷贝

Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

# -*- coding: utf-8 -*-
import copy
class CPU:
   pass
class Disk:
   pass
class Computer:
   def __init__(self, cpu, disk):  # 给对象的实例属性进行初始化
       self.cpu = cpu
       self.disk = disk
cpu = CPU()  # 创建一个 CPU 类的实例对象
disk = Disk()  # 创建一个Disk 类对象
computer = Computer(cpu, disk)  # 创建一个Computer类的实例对象
# 浅拷贝
print(cpu)
print(disk)
computer2 = copy.copy(computer)  # 子对象不拷贝
print(computer, computer.cpu, computer.disk)
print(computer2, computer2.cpu, computer2.disk)
# 类的浅拷贝:
# Python的拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝
# 因此,源对象与拷贝对象会引用同一个子对象

Python详细讲解浅拷贝与深拷贝的使用

浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用

(如果用引用的方式修改其中一个对象,另外一个也会修改改变)

哪些是浅拷贝:

{1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}

3.深拷贝

使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同

# -*- coding: utf-8 -*-
import copy
class CPU:
   pass
class Disk:
   pass
class Computer:
   def __init__(self, cpu, disk):  # 给对象的实例属性进行初始化
       self.cpu = cpu
       self.disk = disk
cpu = CPU()  # 创建一个 CPU 对象
disk = Disk()  # 创建一个硬盘类对象
computer = Computer(cpu, disk)  # 创建一个计算机类对象
# 深拷贝
computer1 = copy.deepcopy(computer)
print(computer, computer.cpu, computer.disk)
print(computer1, computer1.cpu, computer1.disk)
# 类的深拷贝
# 使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象
# 源对象和拷贝对象所有的子对象也不同

Python详细讲解浅拷贝与深拷贝的使用

深拷贝:创建一个新的对象,并且递归的复制它所包含的对象。

修改其中一个,另外一个不会改变。因此,新对象和原对象没有任何关联。

例如:{copy模块的deepcopy()函数}

4.总结

最直观的理解就是:

1.浅拷贝,拷贝的程度浅,只拷贝原数据的首地址,然后通过原数据的首地址,去获取内容。

2.深拷贝,拷贝的程度深,自己新开辟了一块内存,将被拷贝内容全部拷贝过来了;

来源:https://aweia.blog.csdn.net/article/details/125559770

标签:Python,浅拷贝,深拷贝
0
投稿

猜你喜欢

  • Python抽象类应用详情

    2022-03-24 17:41:13
  • 简单介绍Python中的decode()方法的使用

    2021-01-05 23:47:31
  • 支付宝lab logo设计创意发想

    2009-11-12 12:44:00
  • swoole_process实现进程池的方法示例

    2024-06-05 15:40:23
  • Navicat连接MySQL时出现的连接失败问题及解决

    2024-01-16 00:22:13
  • Python类的继承和多态代码详解

    2022-01-20 14:16:39
  • python 经典数字滤波实例

    2022-08-26 10:23:22
  • Python如何根据照片修改时间重命名并排序详解

    2021-06-27 02:58:31
  • python 异常的传递性及主动抛出学习

    2021-03-19 05:02:38
  • js不是基础的基础

    2024-05-03 15:57:54
  • 详解TensorFlow2实现线性回归

    2022-11-10 15:35:13
  • OpenCV+Imutils实现图像的旋转操作

    2021-07-25 20:39:42
  • CSS expression在IE8里正式退出历史舞台

    2008-10-26 16:57:00
  • PHP实现的线索二叉树及二叉树遍历方法详解

    2023-11-13 11:28:06
  • centos 安装python3.6环境并配置虚拟环境的详细教程

    2021-06-10 12:24:49
  • SQL语句练习实例之二——找出销售冠军

    2024-01-26 01:12:19
  • JAVA/JSP学习系列之一

    2023-06-19 16:44:14
  • struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25开发环境搭建图文教程

    2024-01-18 04:21:31
  • 20分钟成功编写bootstrap响应式页面 就这么简单

    2023-08-12 06:12:13
  • 简单介绍Python的轻便web框架Bottle

    2023-06-26 06:19:06
  • asp之家 网络编程 m.aspxhome.com