#[Python]04章-04 リストの参照
ここでは、新たな知識を説明するというより、リストの特徴を知ってほしいという意味で「参照」について述べていきたいと思います。
##オブジェクトの参照
まずは参照について確認していきます。
Python Consoleに以下のコードを入力してください。
>>>Lx = [8, 6, 5, 9, 7]
>>>Ly = Lx
>>>Ly
[8, 6, 5, 9, 7]
この状態で、以下のコードを入力してください。
>>>Ly[4] = 1000
>>>Ly
[8, 6, 5, 9, 1000]
ここまではわかるかと思います。
簡単に説明すると、Lxという変数に[8, 6, 5, 9, 7]というリストを代入し、Lyに代入してから、Ly[4]に1000を代入して、中身を確認しています。
もちろん、Lyを表示すると、[8, 6, 5, 9, 1000]となります。
では、この状態で、Lxを表示してみましょう。すると以下のようになります。
>>>Lx
[8, 6, 5, 9, 1000]
先ほど、Lyのリストの要素を変えたはずなのに、Lxも変わっていることが確認できたかと思います。
この舞台裏を見ていきたいと思います。
まず、
>>>Lx = [8, 6, 5, 9, 7]
についてですが、Lxにリストを代入しています。
ここで重要なのが、02章の「変数」の時にも説明した通り、変数はタグであるという旨を話しました。
今回も、リストの[8, 6, 5, 9, 7]にLxというタグを付けていることは02章で説明したことと同じです。図で説明すると以下の通りです。
では、次に
>>>Ly = Lx
>>>Ly
[8, 6, 5, 9, 7]
について見ていきます。
ここで、Ly = Lxについてなのですが、この代入が行われると、変数Lxが参照しているものを変数Lyも参照しなさいという意味になります。
すると以下のように図で表せると思います。
LxとLyは同じリストを参照しているということになります。
そのため、Lyを出力すると、[8, 6, 5, 9, 7]が出力されるのです。
ではその状態で、
>>>Ly[4] = 1000
>>>Ly
[8, 6, 5, 9, 1000]
について説明します。
Lyが参照している実体は[8, 6, 5, 9, 7]であるため、Ly[4]=1000とすると、実体[8, 6, 5, 9, 7]に対しての動作となり、[8, 6, 5, 9, 1000]となります。
そのため、以下のような図で表せます。
そのような状態で、Lxと入力すると、
>>>Lx
[8, 6, 5, 9, 1000]
となり、Lyと参照している実体がLxも同じなので、Lxの出力結果も変わってくるのです。
このリストの参照に限らず、今後参照についてはいろいろなところで登場します。一般的にオブジェクトの参照と言ったりします。
(※)この参照という概念については、Java言語を習得された方はご存じかと思われます。「配列」においても同じ事象があったかと思います。
##今後の変数に対する表現について
今までは「値をxという変数に代入する」といった「代入」で説明していきました。
これからは「変数xとが実体(オブジェクト)を参照している」と表現したり、「変数xとが示している」といった表現も利用していきます。
##ガーベージコレクション
今まで変数LxとLyによって、リスト(オブジェクト)が参照され、それを参照することで、実体であるリストの中身を確認できました。
では、上記の状況を踏まえ、Python Consoleから以下のコードを入力してください。
>>>Lx = 10
>>>Ly = ['Japan', 'Canada']
ここで何が言いたいかというと、実体であるリスト[8, 6, 5, 9, 1000]はどうなってしまうのかということです。
変数LxとLyには別の実体を参照したため、実体であるリスト[8, 6, 5, 9, 1000]にたどり着けない状態となっています。
このままですと、コンピュータのメモリがいっぱいになってしまいます。
これを避けるために、Pythonでは「ゴミデータ」と判別し、実体であるリスト[8, 6, 5, 9, 1000]を削除します。
これをガーベージコレクションといいます。
##最後に
今回はリストの特徴について述べていきました。
正直な話、「参照」については実務で使うことはないのですが、どのPython書籍にも掲載されている事項となります。
今後、基本情報技術者試験でPythonを選択しようと考えている人は出題される可能性が高いので、ぜひ覚えておきましょう。
###【目次リンク】へ戻る