Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Python の identity って何?
Search
domodomodomo
April 06, 2018
4.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Python の identity って何?
domodomodomo
April 06, 2018
More Decks by domodomodomo
See All by domodomodomo
Python でヒープ - heapq の概要
domodomodomo
0
390
Python の代入のイメージ
domodomodomo
0
2.3k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Language of Interfaces
destraynor
162
27k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
900
30 Presentation Tips
portentint
PRO
1
390
How to make the Groovebox
asonas
2
2.4k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
A Tale of Four Properties
chriscoyier
163
24k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Transcript
Python の iden+ty って何? イメージ編
オブジェクトが持っている 番号です。 3472
>>> # id 関数で調べる。! >>> id(computer)! 4487044448 >>>
• 変数と属性には iden+ty が保存されています。 伝えたいこと 3472 3472
1. 変数、属性とは 2. 代入とは 3. copy と deepcopy の違い
1. 変数、属性とは 2. 代入とは 3. copy と deepcopy の違い
1.1. 変数
は オブジェクト
iden+ty を保持している。 は オブジェクト 3472
iden+ty を保持している。 は は オブジェクト 変数 3472 3472
iden+ty を保持している。 iden+ty を保存している。 は は オブジェクト 変数 3472 3472
3472
iden+ty を保持している。 iden+ty を保存している。 は は は オブジェクト 変数 iden+ty
3472 3472 3472 3472 3472
iden+ty を保持している。 iden+ty を保存している。 オブジェクトを参照している。 は は は オブジェクト 変数
iden+ty 3472 3472 3472 3472 3472
2.2. 属性
は オブジェクト
iden+ty を保持している。 は オブジェクト 3472
iden+ty を保持している。 は は オブジェクト オブジェクト 3472 3472
iden+ty を保持している。 属性を保持している。 は は オブジェクト オブジェクト 3472 3472
iden+ty を保持している。 属性を保持している。 は は は オブジェクト オブジェクト 属性 3472
3472 3472
iden+ty を保持している。 属性を保持している。 iden+ty を保存している。 は は は オブジェクト オブジェクト
属性 3472 3472 3472 3472
iden+ty を保持している。 属性を保持している。 iden+ty を保存している。 は は は は オブジェクト
オブジェクト 属性 iden+ty 3472 3472 3472 3472 3472 3472
iden+ty を保持している。 属性を保持している。 iden+ty を保存している。 オブジェクトを参照している。 は は は は
オブジェクト オブジェクト 属性 iden+ty 3472 3472 3472 3472 3472 3472
cpu primary_memory auxiliary_memory cpu core volume type_ clock volume ‘2.3GHz’
5 ‘8GB’ ‘2133MHz’ ‘DDR4’ ‘256GB’ pc 0. こんなオブジェクトについて考えてみたいと思います。
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 を保持している。
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. オブジェクトは属性を保持している。
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 を保持している。
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 はオブジェクトを保持している。
# コードにすると、こんな感じ...! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),!
Ssd('256GB'))
# クラスは、こんな感じ...! 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
1. 変数、属性とは 2. 代入とは 3. copy と deepcopy の違い
3.1. 変数への代入
# 0. このコードについて考えます。! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz',
'DDR4'),! Ssd('256GB'))! ! new_pc = pc
# 0. 3 つの処理に分けて考えます。! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB',
'2133MHz', 'DDR4'),! Ssd('256GB'))! ! new_pc = pc
# 1. オブジェクトのインスタンス化! pc = Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz',
'DDR4'),! Ssd('256GB'))! ! new_pc = pc
# 2. 変数 pc への代入! pc = Computer(! Cpu('2.3GHz', 5),!
Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))! ! new_pc = pc
# 3. 変数 new_pc への代入! pc = Computer(! Cpu('2.3GHz', 5),!
Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))! ! new_pc = pc
None
# 1. インスタンス化! Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!
# 1. インスタンス化! Computer(! Cpu('2.3GHz', 5),! Memory('8GB', '2133MHz', 'DDR4'),! Ssd('256GB'))!
3472
# 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'))!
# 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 が変数に保存される。
# 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'))!
# 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 が変数に保存される。
# 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 はオブジェクトを参照している。 オブジェクトがコピーされるわけではない。
• 変数に代入してもオブジェクトは コピーされない。 • 変数に代入してもオブジェクトは 変化しない ポイント
3.2. 属性への代入
• 属性に代入しても オブジェクトは、コピーされない。 • 属性に代入するとオブジェクトは 変化する。 ポイント
• このことを知らないと思わぬところでつまづき ます。実際にブログ本文で、問題を通して理 解を深めたいと思います。 なんでポイントなの?
1. 変数、属性とは 2. 代入とは 3. copy と deepcopy の違い
# どのように identity が! # 変化するかを見る。! import copy! ! pc!
copy.copy(pc)! copy.deepcopy(pc)!
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
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)
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 変数に格納されたインスタンスだけ生成されます。
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)
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 全てのインスタンスが生成されます。
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)
1. 変数、属性とは 2. 代入とは 3. copy と deepcopy の違い
• 変数、属性には iden+ty が保存されています。 伝えたかったこと 3472 3472