KUMICO

COLUMN

組み込みエンジニアの戸惑い Pythonの変数ってポインタ?

組み込みソフトウェアエンジニアがPythonを始めてみました。そして、第1の戸惑い、今回はPythonの変数についてまとめていきたいと思います。

・はじめに

この記事を書くに至った経緯を少しだけ。
組み込みソフトウェアエンジニアの私、もちろん得意な言語はC言語。プログラミングの知識は、どの言語も経験がなくこれから始める方よりは多少知識があるつもり。きっちり学んでいくよりも、まずは動かして覚える方が性に合うと、Pythonの環境構築を行い、動かし始めるも、つまづく、そしてまたつまづく・・・。そんな経験をもとに、これは理解しておいたほうが便利だと思われる内容をこれからまとめていきたいと思います。

・変数はポインタ?

まず初めに、色々とあるデータ型をまとめようと思っていた。しかし、それよりも先にC言語脳の組み込みソフトウェアエンジニアにはちょっとした事前知識が必要だった。
色々とデータ型を確認する上で、あれ?という結果を導き出すPython。これを知っているとちょっとした戸惑いは解消されるかもしれない。Pythonの変数はポインタっぽいものだけどポインタではない。
まずはこちらをご覧ください。

>>>
>>> a = 1
>>> print(a)
1
>>> id(a)
1880842464
>>>
>>> b = 3
>>> print(b)
3
>>> id(b)
1880842528

>>>
>>> b = a
>>> print(b)
1
>>> id(b)
1880842464
>>>
つづく

変数に変数を代入すると、同じアドレスとなり、ポインタと同じような扱いとなる。だが安易な気持ちでホイホイ扱うと混乱を招きます。
つづきをご覧ください。

つづき
>>>
>>> b = 5
>>> print(b)
5
>>> print(a)
1
>>> id(b)
1880842592
>>>

同じ変数に値を代入すると、その変数は別の変数となる。また、この値の代入は今回の例に限った話ではなく、例えば整数を代入するたびに別の変数へと生まれ変わる仕組みである。

・リストなんか怖くない

ポインタのようで、ポインタではない、なんと儚い変数。C言語脳の考え方にはない変数の使われ方となっています。だがしかし、ここまで理解してしまえば後は早い。これがリストになったとしても考え方は同じこと。

>>> a = [1, 2, 3]
>>> print(a)
[1, 2, 3]
>>> id(a)
1649538441800
>>> id(a[0])
1880842464
>>> id(a[1])
1880842496
>>> id(a[2])
1880842528
>>>
>>> b = a
>>> print(b)
[1, 2, 3]
>>> id(b)
1649538441800
>>> id(b[0])
1880842464
>>> id(b[1])
1880842496
>>> id(b[2])
1880842528
>>>
つづく

変数に変数を代入しているので、リストであってもポインタと同じような扱いになっています。

つづき
>>>
>>> a[0] = 7
>>> print(a)
[7, 2, 3]
>>> print(b)
[7, 2, 3]
>>> id(b)
1649538441800
>>> id(b[0])
1880842656
>>> id(b[1])
1880842496
>>> id(b[2])
1880842528
>>>

ポインタと同じ扱いということは、勿論、元の変数を変更すれば、どちらの値も変更されます。そして、値を代入するとリスト自体は新しいリストとならないが、代入した要素部分は別の変数となっています。

ここまでくれば、もう少しリストを試して理解を深めるもよし、次の戸惑いに向かうもよしといった所ではないでしょうか。

次回、「Pythonのデータ型をまとめる」の巻。

<関連サービス>
富士ソフト 組み込み開発力
https://www.fsi-embedded.jp/technology/

個別相談も承っております。下記よりお申し込みください。

個別相談会申し込み

シリーズ記事

関連記事

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

お探しの組み込み製品はキーワードで検索!