CTC 教育サービス
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes
こんにちは、菱沼です。
今回も「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習します。
前回からPythonにおける用語の一般的な意味や使われ方を整理するという目的の章に入り、Pythonという言葉の意味を確認しました。
今回は、「ガベージコレクション」と「リテラル」です。
7章では、Pythonに関する用語について、似た表現をされるものを比較しながら、一般的な意味や使われ方を整理していきます。とはいっても、あくまで一般的なレベル感であり、特殊・例外的なケースの想定は除くそうなので、ケースバイケースなこともあるのかもしれません。
その辺は現場でお話し合い頂くとして、そもそも公式的にはどういう定義なのかをきっちり知りたいという方は、公式ドキュメントを参照ください。
用語集/Python公式ドキュメント
というわけで、一つずつ項目を確認していきたいと思います。
正直なことを申しますと、ガベージコレクションという言葉は初めて耳にいたしました...。
調べてみると、「プログラムが使い終わって不要になったメモリー上のデータを自動的に探し、解放してから再利用できるようにする機能」なんだそうな。つまり、この機能がない場合は、手動で削除していかないとメモリーが足りなくなるという現象になると。なので、うっかり解放する手段をとらなかった場合、プログラムが止まってしまうなどのバグが起きえますよ、ということのようです。
それを知ってよくよく考えてみますと、Pythonを学び始めてこの方、メモリーを解放するなんてしたことあったかしら、と思いました。
では、なぜPythonにおいて解放ということをしたことがなかったのか。
これは、Pythonがオブジェクトを参照するものがなくなったときに、自動的に不要になったオブジェクトを処理してくれる仕組みを持っているからなんだそうです。へー。
ちなみに、関数にデータが残ったままになっているということがありました。むしろそのデータを活用する方法もあるらしいという話もした記憶があります。
この現象に関しては、データがどこかで参照され続けているから残っているということなんだそうで、逆に、参照されるものがなくなれば、不要になったデータとして処理される模様。
ではここで書籍の引用です。
---------------
引用P.113
これらのバグを回避するために、Pythonはガベージコレクションを備えています。ガベージコレクションは、プログラマーがしなくてもいいように、メモリーの割り当てと解放のタイミングを追跡する自動メモリー管理の一種です。新しいデータのためにメモリーを利用可能にすることから、ガベージコレクションはメモリーのリサイクルと考えることができます。
例えば、インタラクティブシェルに次のように入力します。
def someFunction():
print(’someFunction() called.’)
spam = [’cat’, ’dog’, ’moose’]
someFunction()
someFunction() called.
someFunction()が呼ばれたとき、リスト[’cat’, ’dog’, ’moose’]を保持するためにメモリーを確保します。Pythonはこれを自動的に管理するので、プログラマーは何バイトのメモリーを要求するかを考える必要はありません。
---------------
なので、上記のサンプルでいえば、someFunction()がどこからも呼び出されることがなくなったタイミングで、リストの中身が消える、ということです。
関数が終了したからと言って、すべての値が速攻で消滅されるわけではないということだけ覚えておきたいと思います。
Pythonにおいて「リテラル」というと、ソースコードに直接記述された値(例:文字列や数値など)のことを指します。
例えば以下のようなソースコードがあった場合・・・
age = 42 + len(’Zophie’)
ageは変数、len()は関数、42と’Zophie’はリテラルです。もっと言うと、42は整数リテラル、’Zophie’は文字列リテラルになります。例えば、42が42.5のように、小数点がついていた場合は浮動小数点数(float型)リテラルになります。
raw文字列(例:r’green’)やf-string(例:f’blue’)も、文字列リテラルとして扱われるようです。
ちなみに、リストや辞書、タプルは以下のように書かれますが、その全体が値を表します。
[1, 2, 3]
(1, 2, 3)
{"name": "Alice"}
ではここで注意点について、一部書籍を引用して確認してみたいと思います。
リテラルの例をあらわした表も載っているのですが、今回は割愛します。
---------------
引用P.114
正確に言えば、-5はリテラルではありません。Pythonでは負の記号(-)が5というリテラルを操作する演算子として定義されているからです。さらに言えば、True、False、NoneはリテラルではなくPythonのキーワードとみなされ、[]と{}は公式ドキュメントのどの部分を見ているかによってディスプレイやアトムと呼ばれます。
---------------
つまり、
x = -5
というのは、x = -5 は、x が変数、- が演算子、5 がリテラルという構成ということです。イメージとしては、x = -(5) と考えるとわかりやすいかもしれません。
そして、True、False、Noneに関してですが、公式ドキュメントを確認してみると、True、False、Noneはキーワードとして定義されています。一方で、リテラルの説明では、これらも「リテラル」として扱われています。リテラルでもあるんかーいとちょっと驚きましたが、そういうものらしいです。
https://docs.python.org/ja/3.15/reference/lexical_analysis.html#keywords
https://docs.python.org/ja/3.15/reference/lexical_analysis.html#literals
それではきりがいいので今回はこちらで終了です。
今回もお付き合いいただきありがとうございました。
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes