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

 更新时间:2022年07月21日 14:28:45   作者:Flyme awei  
这篇文章主要介绍了Python中的深拷贝和浅拷贝,通过讲解Python中的浅拷贝和深拷贝的概念和背后的原理展开全文,需要的小伙伴可以参考一下

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.深拷贝,拷贝的程度深,自己新开辟了一块内存,将被拷贝内容全部拷贝过来了;

到此这篇关于Python详细讲解浅拷贝与深拷贝的使用的文章就介绍到这了,更多相关Python浅拷贝与深拷贝内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python Dataframe 合并与去重详情

    python Dataframe 合并与去重详情

    这篇文章主要介绍了python Dataframe 合并与去重详情,文章围绕主题展开详细的内容介绍,具有一定参考价值,需要的朋友可以参考一下
    2022-08-08
  • pandas or sql计算前后两行数据间的增值方法

    pandas or sql计算前后两行数据间的增值方法

    下面小编就为大家分享一篇pandas or sql计算前后两行数据间的增值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python基础之内置函数

    python基础之内置函数

    这篇文章主要介绍了python内置函数,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下
    2021-10-10
  • 利用Python为女神制作一个专属网站

    利用Python为女神制作一个专属网站

    520不知道送什么礼物?快跟随小编一起学习一下如何利用Python语言制作一个专属的网站送给女神吧!文中的示例代码讲解详细,需要的可以参考一下
    2022-05-05
  • Python Social Auth构建灵活而强大的社交登录系统实例探究

    Python Social Auth构建灵活而强大的社交登录系统实例探究

    这篇文章主要为大家介绍了Python Social Auth构建灵活而强大的社交登录系统实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python pysnmp使用方法及代码实例

    Python pysnmp使用方法及代码实例

    这篇文章主要介绍了Python pysnmp使用方法及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python实现快速排序和插入排序算法及自定义排序的示例

    Python实现快速排序和插入排序算法及自定义排序的示例

    这篇文章主要介绍了Python实现快速排序和插入排序算法及自定义排序的示例,自定义排序用到了Python的sort和sorted函数,需要的朋友可以参考下
    2016-02-02
  • python中torch可以成功引用但无法访问属性的解决办法

    python中torch可以成功引用但无法访问属性的解决办法

    这篇文章给大家介绍了我们在python中运行程序时遇到一个奇怪的报错,torch可以成功引用但无法访问属性,这是比较奇怪的一件事,因为torch肯定是可以访问Tensor,所以本文给大家介绍了torch可以成功引用但无法访问属性的解决办法,需要的朋友可以参考下
    2024-01-01
  • Windows下python3安装tkinter的问题及解决方法

    Windows下python3安装tkinter的问题及解决方法

    这篇文章主要介绍了Windows下python3安装tkinter问题及解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Python办公自动化Word转Excel文件批量处理

    Python办公自动化Word转Excel文件批量处理

    这篇文章主要为大家介绍了Python办公自动化Word转Excel文件批量处理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论