ここで、Pythonの 変数 について、もう少し解説したいと思います。
学校の算数では、=
という記号を 等号 として習ったと思います。
学校で習う等号の場合、
A = B + 3
という式は恒等式と言って、こう書かれていれば、値 A
と B + 3
は常に等しい、という意味になります。したがって、B
の値が 1
のときは A
の値は常に 4
ですし、B
が 100
なら A
の値は 103
と自動的に求まります。
しかし、Pythonをはじめとして、多くのプログラミング言語では、=
記号を等号とは違った意味で使います。Pythonの
A = B + 3
という代入文は、
- 右辺の式(
B+3
)の値を計算する - 1.で計算した結果の値に、左辺で指定した名前(
A
)をつける
という処理を行う文で、恒等式の定義ではありません。
恒等式の場合は、右辺の値が変化すれば自動的に左辺の値も求まりますが、Pythonの代入文では、この処理は代入文を実行したときに一度だけ行われます。ですから、A = B + 3
を実行したときに B
の値が 200
なら、A
の値は 203
となります。この A
の値は、B
の値が変化しても変わりません。A
という変数は、常に代入文の右辺を計算した時点での値を参照します。
B = 200 # B を 200に設定
A = B + 3 # Aの値を B + 3 = 203 に設定
print(A)
B = 300 # B を 300に設定
print(A) # Aの値は 203のまま
A
の値は、B
の値が変わっても、変化しないことがわかると思います。A
の値を更新するには、もう一度 A
を計算して代入する必要があります。
A = B + 3 # 新しいBの値(=300) で、もう一度 A を代入する
print(A)
A は A + 1 と等しい???¶
プログラムを書いていると、こんな代入式もよく出てきます。
A = 1000
A = A + 1
break文による中断 でも、
counter = counter + 1
という代入文が出てきました。
これも、恒等式と考えるとおかしな式です。A = A + 1
という式は、A + 1
と A
は常に等しい、という意味になってしまいますから、数学的な式としては間違いです。
しかし、これはPythonの代入文としては、なんの問題もありません。A = A + 1
という代入文は、
A + 1
を計算する- 1.の結果である
1001
という値を、A
という変数名で参照できるようにする
という処理をおこなっているだけです。やっていることは、
B = A + 1
と書いた場合と大差ありません。
A = A + 1
という代入文を実行すると、そのたびに A
の値は 1
づつ増加しますので、
A = 1000
A = A + 1
A = A + 1
A = A + 1
A = A + 1
というプログラムを実行すると、A
の値は 1004
となります。