python入门-6面向对象编程:11对象的浅拷贝和深拷贝(代码片段)

jack-zh jack-zh     2022-12-09     721

关键词:

对象的浅拷贝和深拷贝:

  变量的赋值操作

    只是形成两个变量,实际还是指向同一个对象。

  浅拷贝

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

  深拷贝

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

【操作】

#测试对象的引用赋值,浅拷贝,深拷贝
import copy
class MobilePhone:
    def __init__(self,cpu,screen):
        self.cpu = cpu
        self.screen = screen

class CPU:
    def calculate(self):
        print(计算。。。。。)
        print(CPU对象:,self)

class Screen:
    def show(self):
        print(显示。。。。。)
        print(屏幕对象:,self)

c = CPU()
s = Screen()
m = MobilePhone(c,s)

m.cpu.calculate()

n = m     #两个变量n,m,但是指向的是同一对象
print(n,m)

m2 = copy.copy(m)    #m2是新拷贝的另一个手机对象,m2,m指向的是不同的对象
print(m,m2)

m.cpu.calculate()
m2.cpu.calculate()   #m2和m拥有了同一个cpu对象和screen对象

m3 = copy.deepcopy(m)
print(m,m3)
m3.cpu.calculate()   #m3和m拥有不同的cpu对象和screen对象

运行结果:

  计算。。。。。
  CPU对象: <__main__.CPU object at 0x000001504F334F28>
  <__main__.MobilePhone object at 0x000001504F39E160> <__main__.MobilePhone object at 0x000001504F39E160>
  <__main__.MobilePhone object at 0x000001504F39E160> <__main__.MobilePhone object at 0x000001504F39E630>
  计算。。。。。
  CPU对象: <__main__.CPU object at 0x000001504F334F28>
  计算。。。。。
  CPU对象: <__main__.CPU object at 0x000001504F334F28>
  <__main__.MobilePhone object at 0x000001504F39E160> <__main__.MobilePhone object at 0x0000015050FC15C0>  
  计算。。。。。
  CPU对象: <__main__.CPU object at 0x0000015050FC1668>

python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承(代码片段)

一:面向对象三大特征介绍  Python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。  封装(隐藏)    隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装... 查看详情

python入门-6面向对象编程:12组合(代码片段)

组合:  “is-a”关系,我们可以使用“继承”。从而实现子类拥有的父类的方法和属性。“is-a”关系指的是类似这样的关系:狗是动物,dogisanimal。狗类就应该继承动物类。  “has-a”关系,我们可... 查看详情

python入门-6面向对象编程:03类对象-类属性-类方法-静态方法(代码片段)

一:类对象  前面讲的类定义格式中,“class类名:”。实际上,当解释器执行class语句时,就会创建一个类对象。【操作】#测试类对象的生成classStudent:pass#空语句print(type(Student))print(id(Student))print(Student)s1=Student()print(s1)S... 查看详情

python入门-6面向对象编程:09多态(代码片段)

多态:  多态(polymorphism)是指同一个方法调用由于对象不同可能会产生不同的行为。在现实生活中,我们有很多例子。比如:同样是调用人的休息方法,张三的休息是睡觉,李四的休息是玩游戏,程序员是敲代码。同样是吃... 查看详情

python入门-6面向对象编程:12设计模式之工厂模式-单例模式(代码片段)

一:工厂模式实现  设计模式是面向对象语言特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是:GOF(GoupOfFour)23种设计模式。  工厂模式实现了创建者和调用者的分离,使用专门的... 查看详情

javascript面向对象编程入门

来源极客网1functionPerson(){2var_this={}//创建一个空的对象,接着我们利用这个"空的对象"承载Person的属性和方法3_this.sayHello=function(){4alert("PHello");5}6return_this;7}89functionTeacher_1(){10var_this=Person();//注意这里的语法小括号11return_th 查看详情

python入门-6面向对象编程:10特殊方法和运算符重载-特殊属性(代码片段)

一:特殊方法和运算符重载  Python的运算符实际上是通过调用对象的特殊方法实现的。比如:#运算符-特殊方法a=20b=30c=a+bd=a.__add__(b)print(‘c=‘,c)print(‘d=‘,d)运行结果:  c=50  d=50常见的特殊方法统计如下:  每个运算... 查看详情

python入门-6面向对象编程:08多重继承-mro()-super()获得父类的定义(代码片段)

一:多重继承  Python支持多重继承,一个子类可以有多个“直接父类”。这样,就具备了“多个父类”的特点。但是由于,这样会被“类的整体层次”搞的异常复杂,尽量避免使用。二:mro()  Python支持多... 查看详情

js对象的浅拷贝和深拷贝

//浅拷贝,拷贝内存块,拷贝部门代码不共存varobj={ a:"a", b:"b", c:{ text:"这是一个文本" }}varcopy=obj;copy.a="copy";console.log(obj.a)//"copy",可以看到这里的浅拷贝,会修改到原先的数据,因为浅拷贝是拷贝同一块内存块//es6有Object.assign()方法... 查看详情

day29面向对象入门

Python之路,Day17=Python基础17-面向对象入门 创建类和对象面向对象编程是一种编程方式,此编程方式的落地需要使用“类”和“对象”来实现,所以,面向对象编程其实就是对“类”和“对象”的使用。类就是一个模板,模板... 查看详情

js的浅拷贝和深拷贝

前言:对象的直接量赋值其实是一种引用,对赋值后的对象修改操作会影响到原始对象值,这里的其中包括object和Array。一、浅拷贝浅拷贝只是复制对象的一个指针,修改复制对象属性相当于修改原始对象的属性代码如下:functio... 查看详情

python入门-6面向对象编程:06私有属性和私有方法(实现封装)-@property装饰器-get和set方法-总结(代码片段)

一:私有属性和私有方法(实现封装)  Python对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:    1.通常我们约定,两个下划线开头的属性是私有的(private)。... 查看详情

js的浅拷贝与深拷贝

浅拷贝//这样的拷贝有一个问题。那就是,如果父对象的属性等于数组或另一个对象,//那么实际上,子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对象被篡改的可能。 functionextendCopy(o){    varcopy={};  ... 查看详情

javascript中的浅拷贝和深拷贝

浅拷贝:拷贝引用。拷贝后的新对象和源对象都是指向同一个引用地址,因此彼此之间操作互相影响。leta={num:1};letb=a;console.log(a===b);//truea.num=2;console.log(b.num);//2深拷贝:拷贝数据深拷贝后的新对象在对内存中重新分配内存空间,... 查看详情

python入门-6面向对象编程:04__del__方法(析构函数)和垃圾回收机制-__call__方法和可调用对象(代码片段)

...占用的资源,例如:打开的文件资源、网络连接等。  Python实现自动的垃圾回收,当对象没有被引用时(引用计数为0),由垃圾回收器调用__del__方法。  我们也可以通过del语句删除对象,从而保证调用__del__方法。系统会自... 查看详情

python面试②——python中的浅拷贝与和深拷贝(代码片段)

文章目录python中如何拷贝一个对象1.变量的赋值操作2.浅拷贝3.深拷贝4.总结python中如何拷贝一个对象1.变量的赋值操作只是多生成了一个变量,实际上还是指向同一个对象#-*-coding:utf-8-*-#author:Flymeawei#开发时间:2022/7/115:32classCPU:... 查看详情

python基础对象的浅拷贝与深拷贝(代码片段)

Python的赋值操作一般都是存储对象的引用,而不是对象的拷贝。因为如果直接对对象进行拷贝,那么运行将会比较缓慢,而且我们实际开发大部分场景都是希望引用对象而不是拷贝对象。当然了,如果你明确要求... 查看详情

python基础对象的浅拷贝与深拷贝(代码片段)

Python的赋值操作一般都是存储对象的引用,而不是对象的拷贝。因为如果直接对对象进行拷贝,那么运行将会比较缓慢,而且我们实际开发大部分场景都是希望引用对象而不是拷贝对象。当然了,如果你明确要求... 查看详情