关键词:
对象的浅拷贝和深拷贝:
变量的赋值操作
只是形成两个变量,实际还是指向同一个对象。
浅拷贝
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的赋值操作一般都是存储对象的引用,而不是对象的拷贝。因为如果直接对对象进行拷贝,那么运行将会比较缓慢,而且我们实际开发大部分场景都是希望引用对象而不是拷贝对象。当然了,如果你明确要求... 查看详情