Pythonの変数とメモリ参照
このトピックを終えると
Pythonにおいて、変数が「値を格納する箱」ではなく、「オブジェクトを指す名前」であることを理解できるようになります。
変数は箱ではない
多くの教材が、変数を「値を格納する箱」として説明しています。しかし、Pythonにおいては、これは不正確な比喩です。
python
a = 10このコードは、「aという箱に10を入れる」という意味ではありません。正確には、次のようになります。
- メモリ上に整数オブジェクト
10が作成される aという名前が、そのオブジェクトを指す(参照する)
python
a = 10b = a # `b`も同じオブジェクト`10`を指す
print(id(a)) # 4350114064print(id(b)) # 4350114064 ← 同じアドレス!print(a is b) # True ← 同じオブジェクトを指しているid()は、オブジェクトのメモリのアドレスを返します。aとbは同じアドレスを指しています。値をコピーしたのではなく、同じオブジェクトに対して別の名前を付けただけです。
再代入は、名前を別の場所に移動させること
python
a = 10b = aa = 20 # `a`を新しい値に関連付ける
print(a) # 20print(b) # 10 ← `b`は依然として元のオブジェクトを指しているa = 20は、「aが指すオブジェクトを20に変更する」という意味ではありません。メモリ上に新しいオブジェクト20が作成され、aという名前がそちらに移動します。bは依然として元の10を指しています。
== vs is
python
x = [1, 2, 3]y = [1, 2, 3]
print(x == y) # True ← 値が同じprint(x is y) # False ← 異なるオブジェクトpython
z = xprint(x is z) # True ← 同じオブジェクトを指している| 演算子 | 比較対象 | 意味 |
|---|---|---|
== | 値 | 内容は同じか? |
is | アイデンティティ | 同じオブジェクトか?(メモリアドレス) |
「同じ内容の本が2冊」は、==ではTrue、isではFalseになります。「同じ本を2人が持っている」場合は、どちらもTrueになります。
データ型と型変換
Pythonの基本的なデータ型:
python
# 数値integer = 42 # int (整数)floating = 3.14 # float (浮動小数点数)
# 文字列text = "안녕하세요" # str
# ブール値flag = True # bool (True/False)
# None — 「値がない」ことを表す特別な型result = None
# 型の確認print(type(42)) # <class 'int'>print(type("hello")) # <class 'str'>型変換
python
# 文字列 → 数値age = int("25") # 25price = float("9.99") # 9.99
# 数値 → 文字列str(42) # "42"
# 注意:変換できない場合はエラーint("hello") # ValueError!名前規則
python
# 良い変数名 — 意味が明確な名前user_name = "김훈"total_score = 95is_active = True
# 悪い変数名x = "김훈" # 何の値か分からないa1 = 95 # 意味不明
# 規則# - 英字、数字、アンダースコア(_)を使用可能# - 数字で始めることはできない(2name → エラー)# - snake_caseを推奨(Pythonの慣例)# - 予約語は使用できない(if、for、classなど)Pythonでは、camelCaseよりもsnake_caseを使用します。userNameの代わりにuser_name。これは、PEP 8(Pythonの公式スタイルガイド)の推奨事項です。