Pythonの関数には参照を渡す

Pythonで自前の関数を作って、それにリストを渡してpopやらの操作をしていたら嵌まったのでメモしておきます。

Pythonの関数には参照が渡される

Pythonのドキュメント にはこのように書いてあります。

関数を呼び出す際の実際の引数 (実引数) は、関数が呼び出されるときに関数のローカルなシンボルテーブル内に取り込まれます。そうすることで、引数は 値渡し (call by value) で関数に渡されることになります (ここでの 値 (value) とは常にオブジェクトへの 参照(reference) をいい、オブジェクトの値そのものではありません)

一瞬、値渡しをするのかと思いました。ですが、値とは言ってもオブジェクトへの参照を値として渡すということです。それって、参照渡しと何が違うんだろう。

ということで、試してみました。

>>> def myfunc(obj):
...     obj[0] = 'modified by myfunc'
...

>>> L = ['1st','2nd']
>>> L
['1st', '2nd']

>>> myfunc(L)
>>> L
['modified by myfunc', '2nd']

呼び出し元のリストLの内容が、定義した関数によって書き換わっております。

ちょっと注意が必要。

公開日

広告