Pythonでは、すべての変数がオブジェクトへの参照になります。オブジェクトは固有のIDを持っており、id()関数でオブジェクトのIDを確認することができます。
str1 = "hello"
print(id(str1)) # str1のIDを表示
str1 = "hi"
print(id(str1)) # str1のIDを表示(値が変わるとIDも変わる)
また、複数の変数が同じオブジェクトを参照することができます。
list1 = [1, 2, 3]
list2 = list1 # list1の参照をlist2にコピー
print(list1 is list2) # True
Pythonの引数は参照の値渡しであることを理解することも重要です。値渡しでは、引数に値を変数にコピーして渡します。参照渡しでは、引数に値ではなく値が格納されているキー(メモリアドレスや固有のidなど)を渡します。参照の値渡しでは、引数に値のキーを変数にコピーして渡します。
def add_one(in_list):
print(id(in_list)) # in_listのIDを表示
in_list.append(1) # in_listに1を追加
out_list = [1, 2, 3]
print(id(out_list)) # out_listのIDを表示
add_one(out_list)
print(id(out_list)) # out_listのIDを表示(関数内でリストが変更される)
このように、Pythonの変数と参照の仕組みを理解することは、効率的なコードを書くために非常に重要です。