Pythonの「名前」と「束縛」を理解するハンズオン4.2

当サイトではアフィリエイト広告を利用しています。

リファレンス

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 の時点では、x10 という整数オブジェクトに束縛されています。
  • 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 の時点で、ba同じオブジェクト を指しています。
  • そのため、b.append(4) を実行すると、a にも影響が出ます!

「変数 ba のコピーが入った」と勘違いしやすいので注意しましょう⚠️


🔹 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 yTrue ですが、x is zFalse になります。
  • 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の「名前」と「束縛」、しっかり理解できましたか?💡
ぜひ、コードを書きながら試してみてください!🚀