1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Python]04章-04 いろいろなデータ構造(リストの参照)

Last updated at Posted at 2020-05-26

#[Python]04章-04 リストの参照
ここでは、新たな知識を説明するというより、リストの特徴を知ってほしいという意味で「参照」について述べていきたいと思います。

##オブジェクトの参照
まずは参照について確認していきます。
Python Consoleに以下のコードを入力してください。

.py
>>>Lx = [8, 6, 5, 9, 7]
>>>Ly = Lx
>>>Ly
[8, 6, 5, 9, 7]

この状態で、以下のコードを入力してください。

.py
>>>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を表示してみましょう。すると以下のようになります。

.py
>>>Lx
[8, 6, 5, 9, 1000]

先ほど、Lyのリストの要素を変えたはずなのに、Lxも変わっていることが確認できたかと思います。

この舞台裏を見ていきたいと思います。

まず、

.py
>>>Lx = [8, 6, 5, 9, 7]

についてですが、Lxにリストを代入しています。
ここで重要なのが、02章の「変数」の時にも説明した通り、変数はタグであるという旨を話しました。

今回も、リストの[8, 6, 5, 9, 7]にLxというタグを付けていることは02章で説明したことと同じです。図で説明すると以下の通りです。

image.png

では、次に

.py
>>>Ly = Lx
>>>Ly
[8, 6, 5, 9, 7]

について見ていきます。
ここで、Ly = Lxについてなのですが、この代入が行われると、変数Lxが参照しているものを変数Lyも参照しなさいという意味になります。

すると以下のように図で表せると思います。

image.png

LxLyは同じリストを参照しているということになります。
そのため、Lyを出力すると、[8, 6, 5, 9, 7]が出力されるのです。

ではその状態で、

.py
>>>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]となります。

そのため、以下のような図で表せます。

image.png

そのような状態で、Lxと入力すると、

.py
>>>Lx
[8, 6, 5, 9, 1000]

となり、Lyと参照している実体がLxも同じなので、Lxの出力結果も変わってくるのです。

このリストの参照に限らず、今後参照についてはいろいろなところで登場します。一般的にオブジェクトの参照と言ったりします。

(※)この参照という概念については、Java言語を習得された方はご存じかと思われます。「配列」においても同じ事象があったかと思います。

##今後の変数に対する表現について
今までは「値をxという変数に代入する」といった「代入」で説明していきました。
これからは「変数xとが実体(オブジェクト)を参照している」と表現したり、「変数xとが示している」といった表現も利用していきます。

##ガーベージコレクション
今まで変数LxLyによって、リスト(オブジェクト)が参照され、それを参照することで、実体であるリストの中身を確認できました。

では、上記の状況を踏まえ、Python Consoleから以下のコードを入力してください。

.py
>>>Lx = 10
>>>Ly = ['Japan', 'Canada']

ここで何が言いたいかというと、実体であるリスト[8, 6, 5, 9, 1000]はどうなってしまうのかということです。

変数LxLyには別の実体を参照したため、実体であるリスト[8, 6, 5, 9, 1000]にたどり着けない状態となっています。

このままですと、コンピュータのメモリがいっぱいになってしまいます。
これを避けるために、Pythonでは「ゴミデータ」と判別し、実体であるリスト[8, 6, 5, 9, 1000]を削除します。

これをガーベージコレクションといいます。

##最後に
今回はリストの特徴について述べていきました。
正直な話、「参照」については実務で使うことはないのですが、どのPython書籍にも掲載されている事項となります。

今後、基本情報技術者試験でPythonを選択しようと考えている人は出題される可能性が高いので、ぜひ覚えておきましょう。

###【目次リンク】へ戻る

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?