Pythonを学ぶ上で、「名前付け(naming)」 と 「束縛(binding)」 の概念はとても重要です。
「変数に値を代入する」と一口に言っても、実は 「名前をオブジェクトに束縛する」 という仕組みが動いています。
今回は、初心者でも理解しやすいように、実際に コードを書きながら学ぶハンズオン形式 で解説していきます!💡
🔹 1. 変数への値の束縛とは?
Pythonでは、変数に値を代入すると 「名前(変数名)」が「オブジェクト(値)」に束縛」 されます。
まず、次のコードを試してみましょう。
📌 例1:基本的な束縛
x = 10 # x に 10 を束縛
print(x) # 10 が表示される
📝 解説
x = 10
と書くと、x
という名前が10
というオブジェクトを指すようになります。- ここで重要なのは、「変数 x に10が入っている」のではなく、「x という名前が10というオブジェクトを指している」ことです。
🔹 2. 名前の再束縛
Pythonの変数は 新しい値に束縛し直す ことができます。
📌 例2:変数の再束縛
x = 10
print(x) # 10
x = "Hello"
print(x) # "Hello"
📝 解説
x = 10
の時点では、x
は10
という整数オブジェクトに束縛されています。x = "Hello"
にすると、x
は"Hello"
という文字列オブジェクトに束縛し直されます。
つまり、変数は値そのものではなく、オブジェクトを指す「名前」に過ぎない のです!🎯
🔹 3. ミュータブル(変更可能)なオブジェクトと束縛
Pythonには ミュータブル(変更可能) なオブジェクトと イミュータブル(変更不可能) なオブジェクトがあります。
タイプ | 例 |
---|---|
イミュータブル(変更不可) | int (整数), str (文字列), tuple (タプル) |
ミュータブル(変更可能) | list (リスト), dict (辞書), set (セット) |
リスト(ミュータブル)の場合、束縛の仕組みが影響を及ぼすことがあります。
📌 例3:リスト(ミュータブル)と束縛
a = [1, 2, 3] # リストを作成
b = a # `b` に `a` の参照を束縛
b.append(4) # `b` に要素を追加
print(a) # [1, 2, 3, 4]
📝 解説
b = a
の時点で、b
はa
と 同じオブジェクト を指しています。- そのため、
b.append(4)
を実行すると、a
にも影響が出ます!
「変数 b
に a
のコピーが入った」と勘違いしやすいので注意しましょう⚠️
🔹 4. is 演算子と id() 関数
変数が同じオブジェクトを指しているかどうかは、is
演算子や id()
関数で確認できます。
📌 例4:オブジェクトの識別
x = [1, 2, 3]
y = x # `y` に `x` を束縛
z = [1, 2, 3] # `z` は同じ内容だが別オブジェクト
print(x is y) # True(同じオブジェクト)
print(x is z) # False(異なるオブジェクト)
print(id(x)) # `x` のID
print(id(y)) # `y` のID(xと同じ)
print(id(z)) # `z` のID(異なる)
📝 解説
x is y
はTrue
ですが、x is z
はFalse
になります。id()
を使うと、変数が指しているオブジェクトの識別番号を確認できます。
🔹 5. グローバル変数とローカル変数
Pythonには グローバル変数(関数の外で定義)と ローカル変数(関数の中で定義)があります。
📌 例5:ローカル変数
x = 10 # グローバル変数
def my_function():
x = 5 # ローカル変数
print(x) # 5 が表示される
my_function()
print(x) # 10(グローバル変数は変わらない)
📝 解説
- 関数の中で
x = 5
を定義しても、外のx
には影響しません。
🔹 6. global キーワード
関数の中で グローバル変数を変更 したい場合は、global
を使います。
📌 例6:global 変数の変更
x = 10
def change_global():
global x
x = 20
change_global()
print(x) # 20
📝 解説
global x
を使うことで、関数内からグローバル変数x
を変更できます。
🔹 7. nonlocal キーワード
関数の中に関数を定義した場合、外側の関数の変数を変更 するには nonlocal
を使います。
📌 例7:nonlocal 変数の変更
def outer():
x = 10 # 外側の関数の変数
def inner():
nonlocal x # `x` を `outer` 関数の `x` に変更
x = 20
inner()
print(x) # 20
outer()
📝 解説
nonlocal x
を使うと、内側の関数から外側の関数の変数を変更できます!
🔹 まとめ
概念 | 説明 |
---|---|
変数の束縛 | x = 10 のように、名前がオブジェクトを指す |
名前の再束縛 | 変数は別のオブジェクトに束縛し直せる |
ミュータブル / イミュータブル | 変更可能(list, dict)/ 変更不可(int, str) |
is / id() |
オブジェクトの識別 |
global キーワード |
グローバル変数を変更 |
nonlocal キーワード |
外側の関数の変数を変更 |
Pythonの「名前」と「束縛」、しっかり理解できましたか?💡
ぜひ、コードを書きながら試してみてください!🚀