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))
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
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的拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝
# 因此,源对象与拷贝对象会引用同一个子对象
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用
(如果用引用的方式修改其中一个对象,另外一个也会修改改变)
哪些是浅拷贝:
{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函数,递归拷贝对象中包含的子对象
# 源对象和拷贝对象所有的子对象也不同
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象。
修改其中一个,另外一个不会改变。因此,新对象和原对象没有任何关联。
例如:{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