Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Python の identity って何?
Search
domodomodomo
April 06, 2018
4.8k
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
370
Python の代入のイメージ
domodomodomo
0
2.3k
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
210
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Designing for Performance
lara
611
70k
From π to Pie charts
rasagy
0
210
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
GitHub's CSS Performance
jonrohan
1033
470k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
Mind Mapping
helmedeiros
PRO
1
250
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