関数に引数として渡される値は、関数内のローカル変数となるという解説を行いました。
参考:
変数のスコープ/グローバル変数とローカル変数 - Python入門ルーム
関数内からグローバルスコープの変数にアクセスする - Python入門ルーム
しかし、例外として、関数に引数として、リストを渡された場合は、関数内で変更されたリスト要素の値が、グローバルスコープでも有効となります。
def listchange(lists):
lists[2] = 'hello'
lst = [1, 2, 3, 4, 5, 6]
print lst
listchange(lst)
print lst
実行結果。
[1, 2, 3, 4, 5, 6] [1, 2, 'hello', 4, 5, 6]
ローカル変数のルールを適用するなら、「listchange(lst)」を呼び出した後でも、リスト(lst)の要素の値は、変更されていないはずです。
しかし、実際には、リスト(lst)は、[1, 2, 'hello', 4, 5, 6]となっており、グローバルスコープに値の変更の影響が及んでいます。
これは、リストの場合は、参照渡しとなっているからです。
リストではない変数の場合、値渡しとなり、関数内には、引数の値のコピーが渡されます。
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/165