Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python の identity って何?

domodomodomo
April 06, 2018
4.6k

Python の identity って何?

domodomodomo

April 06, 2018
Tweet

Transcript

  1. cpu primary_memory auxiliary_memory cpu core volume type_ clock volume ‘2.3GHz’

    5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ pc 0. こんなオブジェクトについて考えてみたいと思います。
  2. 0123 4223 9823 7523 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ pc 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 1. オブジェクトは iden+ty を保持している。
  3. 0123 4223 9823 7523 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ pc 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 2. オブジェクトは属性を保持している。
  4. 0123 4223 9823 7523 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ pc 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 0123 4223 9823 7523 4223 7652 6123 3231 2311 4312 3. 属性は iden+ty を保持している。
  5. 0123 4223 9823 7523 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ pc 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 0123 4223 9823 7523 4223 7652 6123 3231 2311 4312 4. iden+ty はオブジェクトを保持している。
  6. # クラスは、こんな感じ...! class Computer(object):! def __init__(self, cpu, primary_memory, auxiliary_memory):! self.cpu

    = cpu! self.primary_memory = primary_memory! self.auxiliary_memory = auxiliary_memory! ! class Cpu(object):! def __init__(self, clock, core):! self.clock = clock! self.core = core! ! class Memory(object):! def __init__(self, volume, clock, type_):! self.volume = volume! self.clock = clock! self.type_ = type_! ! class Ssd(object):! def __init__(self, volume):! self.volume = volume
  7. # 2. 変数 pc への代入! pc = Computer(! Cpu('2.3GHz', 5),!

    Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))! ! new_pc = pc
  8. # 3. 変数 new_pc への代入! pc = Computer(! Cpu('2.3GHz', 5),!

    Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))! ! new_pc = pc
  9. # 1. インスタンス化! Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!

    3472 pc # 2. 代入! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!
  10. # 1. インスタンス化! Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!

    3472 3472 pc # 2. 代入! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))! 代入すると iden+ty が変数に保存される。
  11. # 1. インスタンス化! Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!

    3472 3472 pc new_pc # 3. 代入! new_pc = pc # 2. 代入! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!
  12. # 1. インスタンス化! Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!

    3472 3472 3472 pc new_pc # 3. 代入! new_pc = pc # 2. 代入! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))! 代入すると iden+ty が変数に保存される。
  13. # 1. インスタンス化! Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!

    3472 3472 3472 pc new_pc # 3. 代入! new_pc = pc # 2. 代入! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))! iden+ty はオブジェクトを参照している。 オブジェクトがコピーされるわけではない。
  14. 0123 4223 9823 7523 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ pc 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 0123 4223 9823 7523 4223 7652 6123 3231 2311 4312 1. pc
  15. 9812 4223 9823 7523 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 9812 4223 9823 7523 4223 7652 6123 3231 2311 4312 2. copied_pc copy.copy(pc)
  16. 9812 4223 9823 7523 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ copy.copy(pc) 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 9812 4223 9823 7523 4223 7652 6123 3231 2311 4312 変数に格納されたインスタンスだけ生成されます。
  17. 9812 6212 5432 1423 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 9812 6212 5432 1423 4223 7652 6123 3231 2311 4312 3. deepcopied_pc copy.deepcopy(pc)
  18. 9812 6212 5432 1423 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ copy.deepcopy(pc) 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 9812 6212 5432 1423 4223 7652 6123 3231 2311 4312 全てのインスタンスが生成されます。
  19. 9812 6212 5432 1423 cpu primary_memory auxiliary_memory cpu core volume

    type_ clock volume 4223 7652 6123 ‘2.3GHz’ 5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ 3231 2311 4312 9812 6212 5432 1423 4223 7652 6123 3231 2311 4312 ただし immutable なオブジェクトはそのまま copy.deepcopy(pc)