python学习之【浅拷贝】

这篇具有很好参考价值的文章主要介绍了python学习之【浅拷贝】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

上一篇文章,python学习之【继承、封装、多态】主要学习了面向对象的三大特征。这篇文章记录下对python的浅拷贝的学习,下一篇文章接着学习深拷贝。

python学习之【浅拷贝】,python,python,学习,浅拷贝

简单了解

浅拷贝:python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,原对象与拷贝对象会引用同一个子对象(如果不好理解的话,可以接着往下看两张图)

浅拷贝

我们可以通过列表(可变序列)实现浅拷贝,首先我们创建一个列表a,然后将列表a的id地址以及其浅层元素和深层元素的id地址打印出来:

python学习之【浅拷贝】,python,python,学习,浅拷贝

对列表a进行浅拷贝:

python学习之【浅拷贝】,python,python,学习,浅拷贝
由这两张图可以发现,当对列表a进行浅拷贝的时候,列表a指向的内存地址是不改变的(即浅拷贝后产生的对象和原对象都是指向的同一个内存地址);并且无论是原对象列表a的浅层元素还是深层元素,它们拷贝前后都是指向的同一个内存地址。

接着,我们对浅拷贝后产生的对象的浅层元素和深层元素进行更改:

对浅拷贝后产生的对象的浅层元素进行更改
python学习之【浅拷贝】,python,python,学习,浅拷贝
对浅拷贝后产生的对象的深层元素进行更改

python学习之【浅拷贝】,python,python,学习,浅拷贝

对于列表浅拷贝和深拷贝的示意图(Pythontutor可视化代码工具):

python学习之【浅拷贝】,python,python,学习,浅拷贝
这里我参考了一个视频讲解,觉得不错,分享给大家~点此查看。

由此,我们可以对浅拷贝做一个小结:

浅拷贝只拷贝浅层元素,深层元素的内存地址不改变当对拷贝产生的新的对象的浅层元素进行更改时,原对象的主元素不做改变但是对拷贝后产生的对象的深层对象进行改变时,那么原对象的深层元素的地址就会发生变化。

类的浅拷贝

通过举列表浅拷贝的例子我们不难发现,浅拷贝拷贝的是对象的主元素,即会产生一个指向新的地址的主元素;而子元素不会发生拷贝,因此依然和原来对象指向的地址相同。

那么接下来我们来看一下类的浅拷贝的运用:

# 变量赋值和浅拷贝
class CPU():
    pass

class Disk():
    pass
class Computer():
    # 初始化方法
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk
cpu1=CPU()
cpu2=cpu1
print(cpu1,id(cpu1),type(cpu1))
print(cpu2,id(cpu2),type(cpu2))
'''
<__main__.CPU object at 0x7f883d4d5cd0> 140223120760016
<__main__.CPU object at 0x7f883d4d5cd0> 140223120760016
'''
disk1=Disk()
print('disk1的信息',disk1,id(disk1),type(disk1))
computer1=Computer(cpu1,disk1)
print('computer1的信息',computer1,id(computer1),type(computer1))
# 浅拷贝
import copy
computer2=copy.copy(computer1)
print(computer1,id(computer1),computer1.cpu,computer1.disk)
print(computer2,id(computer2),computer2.cpu,computer2.disk)
'''
浅拷贝中子对象即原类的实例对象的子对象(computer1.cpu  computer1.disk)不拷贝 因此拷贝之后的computer2的参数cpu 和 disk 的内存地址也是指向原来computer1的cpu 和 disk所指向的内存地址的  但是 computer1这个实例对象发生拷贝  也就是产生了一个computer2这个新对象   这个新对象指向的id地址也和原对象的不同
<__main__.Computer object at 0x7f883d4d5d50> <__main__.CPU object at 0x7f883d4d5cd0> <__main__.Disk object at 0x7f883d4d5d10>
<__main__.Computer object at 0x7f883d4d5ed0> <__main__.CPU object at 0x7f883d4d5cd0> <__main__.Disk object at 0x7f883d4d5d10>
'''

python学习之【浅拷贝】,python,python,学习,浅拷贝
图解过程:
python学习之【浅拷贝】,python,python,学习,浅拷贝

每篇一语

工欲善其事,必先利其器。
如有不足,感谢指正!
文章来源地址https://www.toymoban.com/news/detail-619254.html

到了这里,关于python学习之【浅拷贝】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】python深拷贝与浅拷贝详解(必须掌握)

    深拷贝和浅拷贝是python必须要掌握的内容,无论你是面试开发、测试、运维等职位,只要是python,深拷贝与浅拷贝是面试官常问的一个重要知识点。 (关注“测试开发自动化” 弓中皓,获取更多学习内容) 相同点: 无论深拷贝还是浅拷贝都会创建一个新对象。即:拷贝出来

    2024年03月25日
    浏览(29)
  • 【python 深拷贝与浅拷贝】

    python 深拷贝与浅拷贝 在用影刀编写流程的时候发现,明明只修改人名为“小张”对应的字典里面的值,但是所有的人名对应的值都被修改了。 第14行,设置键值对,值对应的变量“初始打卡类型字典”是前面流程生成的,还是引用了原来的地方。 用python来复现: 1、如果列

    2024年02月05日
    浏览(28)
  • Python中的深拷贝浅拷贝

    浅拷贝就是:拷贝了引用,并没有拷贝内容,和在Linux中的硬链接有些类似,在python中,使用=赋值的动作就是一个浅拷贝 浅拷贝中的新旧对象,共用一个内存地址,当操作新旧对象中的任意对象,发生修改,内存地址中的值发生改变,则新旧对象都会发生变化;如果新旧对象

    2024年02月09日
    浏览(27)
  • Python中浅拷贝与深拷贝

    在本文中,将介绍如何在Python 3中复制或“克隆”对象,以及所涉及的一些注意事项。 注:本教程是用Python 3编写的,但是在复制对象时,Python 2和3并没有什么区别。当有不同时,会在文中指出。 让我们首先看看如何复制Python的内置集合。Python内置的集合是可变的,如列表、

    2024年02月02日
    浏览(31)
  • 图解Python深拷贝和浅拷贝

    Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。 下面本文就通过简单的例子介绍一下这些概念之间的差别。 对象赋值 直接看一段代码: 代码的输出为: 下面来分析一下这段代码: 首先,创建了一个名为will的变

    2024年04月13日
    浏览(61)
  • Python - 拷贝 - 浅拷贝(Shallow Copy)和深拷贝(Deep Copy)

    假设我以这样的方式创建一个 3 x 5 的二维数组: 然后我修改 a [ 2 ] [ 3 ] a[2][3] a [ 2 ] [ 3 ] 的值为 1 1 1 : 结果会发现数组 a a a 中第二维坐标为 3 3 3 的数全部被修改为了 1 1 1 ,而没有发生“第一维坐标为 2 2 2 的数全部被改成了 1 1 1 ” 这就涉及到了Python中的拷贝机制。 Python中

    2023年04月08日
    浏览(28)
  • Python:列表的浅拷贝与深拷贝

    相关阅读 Python专栏 https://blog.csdn.net/weixin_45791458/category_12403403.html?spm=1001.2014.3001.5482         在python语言中,因为其面向对象的特性,在进行列表拷贝时可能会出现一些意想不到的结果,涉及到列表的浅拷贝和深拷贝相关问题,本文将对其进行总结。         首先我们来

    2024年02月09日
    浏览(30)
  • 一文彻底理解python浅拷贝和深拷贝

    万物皆对象:在学习python的深浅拷贝之前我们必须要知道一个事情,就是python对象的引用,在python里面, 万物皆对象,万物皆对象,万物皆对象 ,不管什么数据类型都是对象。我们定义一个变量并给这个变量赋值的时候赋的并不是这个对象值,而是这个对象引用,并不是一

    2024年02月07日
    浏览(33)
  • python-浅拷贝(copy)与深拷贝(deepcopy)

    目录 一、前言: 二、深拷贝与浅拷贝的异同:         1.相同点:                2.不同点:         3.形象说明:         注意: 三、浅拷贝:  3.1.1浅拷贝示意图: 3.1.2示意图说明         1.对象与子对象(元素)的关系:         2.对象:         3.元

    2024年02月11日
    浏览(24)
  • Python原型模式介绍、使用;浅拷贝/深拷贝原理

            1. 概念 原型模式是一种创建型设计模式,它通过复制(克隆)现有对象来创建新对象。这样可以避免使用复杂的构造函数来创建对象,提高程序的性能和可维护性。         2. 功能 原型模式的功能是通过复制现有对象来创建新对象,从而提高程序的性能和可维护性

    2024年02月15日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包