関連するもう 1 つの質問は、「変数を参照渡しするにはどうすればよいですか?」です。Daren Thomas は代入を使用して、Python で変数パスがどのように機能するかを説明しました。append メソッドについても、同様に考えることができます。リスト「list_of_values」をリスト「list_of_variables」に追加するとします。
list_of_variables = []
list_of_values = [1, 2, 3]
list_of_variables.append(list_of_values)
print "List of variables after 1st appending: ", list_of_variables
list_of_values.append(10)
list_of_variables.append(list_of_values)
print "List of variables after 2nd appending: ", list_of_variables
追加操作は次のように考えることができます。
list_of_variables[0] = list_of_values --> [1, 2, 3]
list_of_values --> [1, 2, 3, 10]
list_of_variables[1] = list_of_values --> [1, 2, 3, 10]
「list_of_variables」の 1 番目と 2 番目の項目がメモリ内の同じオブジェクトを指しているため、上記の出力は次のようになります。
List of variabiles after 1st appending: [[1, 2, 3]]
List of variables after 2nd appending: [[1, 2, 3, 10], [1, 2, 3, 10]]
一方、「list_of_values」が変数の場合、動作は異なります。
list_of_variables = []
variable = 3
list_of_variables.append(variable)
print "List of variabiles after 1st appending: ", list_of_variables
variable = 10
list_of_variables.append(variable)
print "List of variables after 2nd appending: ", list_of_variables
追加操作は次と同等になりました。
list_of_variables[0] = variable --> 3
variable --> 4
list_of_variables[1] = variable --> 4
出力は次のとおりです。
List of variabiles after 1st appending: [3]
List of variables after 2nd appending: [3, 10]
variable と list_of_values の違いは、後者がインプレースで変更されることです。