読者です 読者をやめる 読者になる 読者になる

へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)!

pythonの代入ぜんぜんわかってなかった

f:id:haruharu1:20150616005321p:plain

イコールの右側:メモリにオブジェクトつくる
イコールの左側:そこへのリファレンス
イコール:メモリにつくったオブジェクトへのリファレンスを作成する

このようにしてオブジェクトがインスタンスへ超進化するのだ。
インスタンスは、「リファレンスが張られたオブジェクト」と理解している。


Javaとかでは、「a = b = オブジェクト;」って書くと、
たとえばaを呼び出したときは、a -> b -> オブジェクトという順番に参照してるから、bを変更すると、aもbも同じオブジェクトになるんだけど、
pythonでは、最初に代入したいときにメモリにあるオブジェクトにリファレンスが張られるようだね
(´・ω・`)シランカッタ……

a = b = [1, 2]
のあと
b[0] = 3をすると変わるのは、
[1, 2]がメモリ上のオブジェクトで、たとえば0x0101番目のアドレスにあったとすると、リストは、メモリ上にある不変型の12を示していて、
そのインデックス0が、3になっただけなので、
別に[1, 2]だったオブジェクトのアドレスは変わらず0x101番目のまま。
言い換えると、[3, 2]になっても0x101番目。

aもbも、0x101番目のアドレスにある情報を見ているから、aもbも、リファレンス先は[3, 2]である。

ていうかリファレンスってどこのメモリ使ってんだろ