関数の引数にリストを渡した場合

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

関数に引数として渡される値は、関数内のローカル変数となるという解説を行いました。

スポンサーリンク

参考:
変数のスコープ/グローバル変数とローカル変数 – 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]となっており、グローバルスコープに値の変更の影響が及んでいます。

これは、リストの場合は、参照渡しとなっているからです。
リストではない変数の場合、値渡しとなり、関数内には、引数の値のコピーが渡されます。

スポンサーリンク
 
スポンサーリンク