
目標
(pythonの)「リスト」の同一性について理解する。
「is演算子」を利用してオブジェクトの同一性を比較できる。
(pythonの)「リスト」の代入について動きを理解する。
(pythonの)「リスト」の同一性
同一のリストを扱う手順
(pythonの)「リスト」は作成されたときに「個別の実体」として存在するようになります。変数は実体への紐づけなので、いくつも変数を設定することが可能です。
実体に対して名前を付けたものが変数です。お友達(実体)の呼び方(あだ名)のような関係です。

お友達の「たまにゃん」をリストに見立てると、プログラムは次のように書けます。
tama_nyan = [1, 2, 3, 4, 5]
ここで「うさぎちゃん」が「おおかみくん」に「たまにゃん」を紹介したとします。すると「おおかみくん」は「たまにゃん」と友達になって「たま」と呼ぶようになりました。

いろいろな呼び方であっても同じものを指しているというイメージが重要です。
リストのプログラムで、この、お友達の紹介は、「変数から変数への代入」として次のように書けます。
tama_nyan = [1, 2, 3, 4, 5]
tama = tama_nyan
同一のリストかを確認する方法
「tama_nyan」と「tama」が同じリストを扱っているのかを確認します。この確認には識別番号を確認できる「id()」を利用します。また、「is演算子」を利用してオブジェクトの同一性を真偽値で確認します。
tama_nyan= [1, 2, 3, 4, 5]
tama = tama_nyan
print(id(tama_nyan))
print(id(tama))
print(tama_nyan is tama)
実行結果:識別番号が同一で、is演算子の結果も「True」となっています。これで、ふたつの変数が同じものを指していることが確認できます。

複数の変数に紐づいているリストを扱うときの注意点
複数の変数に紐づいているリストを操作するときは次の話と似た意味で注意が必要です。
「たま」のお友達の「おおかみくん」が「たま」にはサングラスは必要ないと思って、「たま」の「サングラス」を捨ててしまいました。この場合、今後、別の動物たちも「サングラスをはずしたたま」を見ることになります。

これを、プログラムで記述すると次のようになります。
tama_nyan = [1, 2, 3, 4, 5]
tama = tama_nyan
tama.clear()
print(tama_nyan)
print(tama)
実行結果:両方の変数は常に同じリストを扱っているので、いずれの変数から確認してもリストは空となっています。

(pythonの)「リスト」の非同一性
続いて、リストの非同一性について考えます。非同一性ということは、「同じでない」ということで、先ほどの動物たちのお話で例えると、「たま」以外のネコが、 もう一匹、現れたと言えます。
この場合、この新しいネコは、さきほどの「たま」とは別のネコなので、同一ではないことが分かります。このネコの名前を「みけ」とすると次のように考えることができます。


これを、プログラムで記述すると次のようになります。
tama_nyan = [1, 2, 3, 4, 5]
mike_nyan = [1, 2, 3, 4, 5]
このふたつは、同じ「ネコ」ですが、実体は別々です。リストではいずれも「[1,2,3,4,5]」の同じリストに見えますが、「tama_nyan」と「mike_nyan」が紐づいている実体は別のものとなっています。
非同一のリストかを確認する方法
「tama_nyan」と「mike_nyan」が違うリストを扱っているのかを確認します。この確認も「id()」と「is演算子」を利用します。
tama_nyan = [1, 2, 3, 4, 5]
mike_nyan = [1, 2, 3, 4, 5]
print(id(tama_nyan))
print(id(mike_nyan))
print(tama_nyan is mike_nyan)
実行結果:識別番号が異なっていて、is演算子の結果も「False」となっています。これで、ふたつの変数が違うものを指していることが確認できます。

次の操作では片方のリストのみ、変更されたことが確認できます。
tama_nyan = [1, 2, 3, 4, 5]
mike_nyan = [1, 2, 3, 4, 5]
print('変更前--------------')
print(tama_nyan)
print(mike_nyan)
tama_nyan
= 10
print('変更後--------------')
print(tama_nyan)
print(mike_nyan)
実行結果

今回は以上になります。

ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

