zoukankan      html  css  js  c++  java
  • (一)Python入门-6面向对象编程:11对象的浅拷贝和深拷贝

    对象的浅拷贝和深拷贝:

      变量的赋值操作

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

      浅拷贝

        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>

  • 相关阅读:
    Oracle—SQL基础语句
    ORACLE中数据类型
    ORACLE表结构的操作
    PLSQL--存储过程
    PLSQL--游标
    PLSQL --流程控制
    PLSQL --变量
    Ajax请求校验username是否可用
    jQuery学习笔记(四)使用选择器三
    jQuery学习笔记(三)使用选择器二
  • 原文地址:https://www.cnblogs.com/jack-zh/p/10850292.html
Copyright © 2011-2022 走看看