別の変数を代入

広告

変数にはオブジェクトだけではなく、他の変数を代入することも可能です。次の例を見てください。

var1 = 25
var2 = var1

変数にオブジェクトを代入するということは、変数にオブジェクトへの参照を格納することでした。つまり変数にはオブジェクトの場所だけを知っていることになります。そして変数に別の変数を代入すると、右辺の変数が参照しているオブジェクトを左辺の変数も参照するようになります。

つまり上記では変数「var1」も変数「var2」も同じ数値オブジェクトの「25」を参照することになります。

同じオブジェクトを参照していますので、オブジェクトそのものに変更が加えられた時、そのオブジェクトを参照している全ての変数に影響が出ます。Pythonでは数値や文字列のオブジェクトは一度作成されると変更が出来ない(不変性のオブジェクト)のですが、リストと呼ばれるオブジェクトは作成後に変更が可能なため注意が必要です。

リストについてはまた別のページで詳しく見ていきますが、簡単に変数を代入する場合の注意点を確認しておきます。

list1 = [1, 2]
list2 = list1

list1.append(3)

print list1    # [1, 2, 3]
pirnt list2    # [1, 2, 3]

上記では変数「list1」にリストオブジェクトの[1, 2]を代入しています。そして変数「list2」に変数「list1」を代入することで変数「list2」も同じリストオブジェクトを参照することになります。そして変数「list1」が参照しているリストオブジェクトに要素を1つ追加しています。

この後で変数「list1」と変数「list2」を「print」文で出力してみると、どちらの場合も[1, 2, 3]と出力されます。これはどちらの変数も同じオブジェクトを参照している為です。

もう1つ次の例を見て下さい。

var1 = 25
var2 = var1
var1 = 30

print var1    # 30
print var2    # 25

今回の場合は、変数「var1」に数値の「25」を代入し、次に変数「var2」に変数「var1」を代入します。そして改めて変数「var1」に数値の「30」を代入しています。

この時、変数「var2」も数値オブジェクトの「30」を参照するわけではありません。変数「var1」に数値の「30」を代入することは、元々変数1が参照していた数値オブジェクト「20」のオブジェクトの内容を変更したのではなく、新しい数値オブジェクトの「30」を参照するように変更しただけだからです。変数「var2」は引き続き数値の「20」を参照していますので「print」文で出力した結果は上記のようになります。

先ほどのリストオブジェクトの場合はオブジェクトそのものを変更しているのとは異なり、新しいオブジェクトを代入した場合には新しく別のオブジェクトを参照するように変更しただけという点に注意して下さい。

サンプルコード

では実際に試してみます。

#coding: UTF-8

pref1 = u"東京"
pref2 = pref1

print pref1, pref2

pref1 = u"大阪"

print pref1, pref2

list1 = [1, 2]
list2 = list1

list1.append(3)

print list1
print list2

上記を「test4-1.py」として保存します。保存する時の文字コードはUTF-8です。そして次のように実行して下さい。

別の変数を代入

( Written by Tatsuo Ikura )