このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Python入門】変数は値のオブジェクトを参照している

変数は値のオブジェクトを参照している
Pythonプログラミングにおいて、変数は単なる値の保存場所ではなく、オブジェクトへの参照を保持する重要な役割を果たします。これにより、変数間で同じオブジェクトを共有したり、オブジェクトの状態を柔軟に管理したりすることが可能となります。ここでは、Pythonにおける変数の仕組み、オブジェクトの参照方法、そしてid
関数やis
演算子を用いたオブジェクトの同一性確認について詳しく解説します。

プログラムのダウンロード
「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
1.Pythonにおける変数の仕組み
Pythonでは、変数はオブジェクトへの参照を保持しています。これは、他の多くのプログラミング言語(例えばC/C++やJava)とは異なる点で、変数自体がデータを直接保持するのではなく、データが格納されたオブジェクトを指し示しています。
Pythonにおける変数の仕組み
それぞれの変数がどのメモリオブジェクトを参照しているかを中央の矢印で表しています。
メモリ上のオブジェクト | 参照先 | メモリ上の変数(一覧) |
---|---|---|
アドレス: 1000000 型: 整数 (Integer) 値: 123 | ← | 変数名: x 参照先: アドレス 1000000 |
アドレス: 2000000 型: 浮動小数点数 (Float) 値: 4.56 | ← | 変数名: y 参照先: アドレス 2000000 |
アドレス: 3000000 型: 文字列 (String) 値: 'abc' | ↖ | 変数名: z 参照先: アドレス 2000000 |
ポイント
- 変数はオブジェクトへの参照を保持する。
- 同じオブジェクトを複数の変数が参照することができる。
- 変数に新しい値を代入すると、変数は新しいオブジェクトを参照するようになる。
2.オブジェクトと参照
Pythonでは、すべてのデータ(整数、浮動小数点数、文字列、リスト、辞書など)はオブジェクトとして扱われます。変数はこれらのオブジェクトを参照するための名前です。
例:オブジェクトへの参照
# 整数オブジェクトへの参照
a = 10
print(a) # 出力: 10
# 文字列オブジェクトへの参照
b = "Hello, Python!"
print(b) # 出力: Hello, Python!
# リストオブジェクトへの参照
c = [1, 2, 3]
print(c) # 出力: [1, 2, 3]
実行結果
10
Hello, Python!
[1, 2, 3]
解説
- 変数
a
は整数オブジェクト10
を参照しています。 - 変数
b
は文字列オブジェクト"Hello, Python!"
を参照しています。 - 変数
c
はリストオブジェクト[1, 2, 3]
を参照しています。
3.id
関数を使ってオブジェクトの識別番号を取得
Pythonでは、id()
関数を使用してオブジェクトの一意な識別番号(通常はメモリアドレス)を取得することができます。これにより、異なる変数が同じオブジェクトを参照しているかどうかを確認することが可能です。
例:id
関数の使用
# 同じオブジェクトを参照する変数
x = [4, 5, 6]
y = x
print(id(x)) # 例: 140352736239296
print(id(y)) # 例: 140352736239296
# 別々のオブジェクトを参照する変数
z = [4, 5, 6]
print(id(z)) # 例: 140352736239488
実行結果
2279622464192
2279622464192
2279622463424
解説
- 変数
x
とy
は同じリストオブジェクトを参照しているため、id(x)
とid(y)
は同じ値を返します。 - 変数
z
は新しいリストオブジェクトを参照しているため、id(z)
はx
やy
とは異なる値を返します。
4.is
とis not
演算子による同一性の確認
is
演算子とis not
演算子を使用することで、二つの変数が同じオブジェクトを参照しているかどうかを確認できます。これは、値が等しいかどうかを確認する==
演算子とは異なります。
例:is
とis not
演算子の使用
# 同じオブジェクトを参照する変数
a = "Python"
b = a
print(a is b) # 出力: True
print(a is not b) # 出力: False
# 異なるオブジェクトを参照する変数
c = "Python"
d = "Java"
print(c is d) # 出力: False
print(c is not d) # 出力: True
# リストオブジェクトの場合
e = [1, 2, 3]
f = [1, 2, 3]
print(e is f) # 出力: False
print(e is not f) # 出力: True
実行結果
True
False
False
True
False
True
解説
- 変数
a
とb
は同じ文字列オブジェクトを参照しているため、a is b
はTrue
を返します。 - 変数
c
とd
は異なる文字列オブジェクトを参照しているため、c is d
はFalse
となります。 - 変数
e
とf
は同じ内容のリストを持っていますが、異なるオブジェクトを参照しているため、e is f
はFalse
を返します。
5.==
と!=
演算子による値の等価性の確認
==
演算子と!=
演算子は、二つの変数の値が等しいかどうかを比較します。これは、変数が同じオブジェクトを参照しているかどうかを確認するis
演算子とは異なります。
例: ==
と!=
演算子の使用
# 同じ値を持つ異なるオブジェクト
a = [7, 8, 9]
b = [7, 8, 9]
print(a == b) # 出力: True
print(a is b) # 出力: False
# 数値の比較
x = 100
y = 100
print(x == y) # 出力: True
print(x is y) # 出力: True(小さな整数はキャッシュされるため同一オブジェクト)
# 文字列の比較
str1 = "Data"
str2 = "Data" # 出力: True(小さな文字列はキャッシュされるため同一オブジェクト
print(str1 == str2) # 出力: True
print(str1 is str2) # 出力: True
実行結果
True
False
True
True
True
True
解説
- 変数
a
とb
は異なるリストオブジェクトを参照していますが、内容が同じため、a == b
はTrue
を返します。一方、a is b
はFalse
です。 - 変数
x
とy
は小さな整数を参照しているため、x is y
もTrue
になります。 - 変数
str1
とstr2
は同じ文字列を参照しているため、str1 is str2
はTrue
です。
まとめ
ここでは、Pythonにおける変数が値のオブジェクトを参照しているという概念について学びました。
- 変数の仕組み:変数はオブジェクトへの参照を保持し、同じオブジェクトを複数の変数が参照することができる。
id
関数:オブジェクトの一意な識別番号を取得し、変数が同じオブジェクトを参照しているかを確認できる。is
とis not
演算子:オブジェクトの同一性を確認するために使用し、二つの変数が同じオブジェクトを参照しているかどうかを判断できる。==
と!=
演算子:値の等価性を比較し、異なるオブジェクトでも内容が同じ場合にTrue
を返す。
これらの知識を基に、Pythonプログラム内で変数を効果的に活用し、オブジェクトの管理や比較を適切に行うことができます。次のコンテンツでは、変数と定数は名前で区別することについて詳しく解説していきます。ぜひ、実際にコードを書きながら、変数の参照とオブジェクトの関係を体験してみてください。