8章オブジェクト参照、可変性、リサイクル

「悲しそうだな。」騎士は心配そうにいいました。「そなたをなぐさめる歌をうたってあげよう。」(中略)「歌の名は『タラの目』っていうんだ。」

「まあ、それが歌の名まえなの?」アリスは、つとめて興味をもとうとしていいました。

「いや、そなたはわかっていないんだ。」騎士はじれったそうにいいました。「その名まえがそう呼ばれているというんで、ほんとうの名まえは『年とった年よりの男』というんだ。」

——ルイス・キャロル『鏡の国のアリス』、第8章「これは拙者がつくったものだ」より[JP-09]

アリスと騎士は、本章でこれから説明することを示唆しています。本章のテーマはオブジェクトとその名前の区別です。名前はオブジェクトではありません。名前は別のものです。

この章は、Pythonの変数が「ラベルであり箱ではない」というたとえから始まります。参照変数はもうご存知だとしても、この比喩は誰かにエイリアスの問題を説明するときにはまだ便利かもしれません。

続いて、オブジェクトの同一性(identity)、値(value)、エイリアス(alias)の概念を説明します。タプルは不変ですが、その値は変更できるという、驚くべき特性もここで明らかになります。これが「浅い」コピーと「深い」コピーの説明につながります。その次のテーマは参照と関数の引数です。引数のデフォルト値が可変である場合の問題と、関数のクライアントが渡す可変な引数の安全な処理方法を説明します。

本章最後の節では、ガベージコレクション、delコマンド、オブジェクトを存続させることなく「記憶」する弱参照の使用法を説明します。

本章のトピックは無味乾燥かもしれませんが、現実世界のPythonプログラムにある微妙なバグの原因となっているものでもあります。 ...

Get Fluent Python ―Pythonicな思考とコーディング手法 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.