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

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

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

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

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


日時: 2008年06月01日 23:41
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/165

この記事にトラックバックされる方は、参照先が分かるようにするために、「関数の引数にリストを渡した場合」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - Python勉強ルーム