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の内容が、定義した関数によって書き換わっております。
ちょっと注意が必要。
公開日
広告
Pythonカテゴリの投稿
- PythonからWindows RuntimeのAPIを使ってみる
- Pythonから外部のアプリケーションを実行する
- PythonでApacheのログを読む
- PythonでURLを結合する
- PythonでURLを解析する
- Pythonでtar.gzなファイルを解凍(展開)する
- Pythonでwavファイルを書き出す
- Pythonでwavファイルを読み込む
- Pythonでデータを整形して出力する
- Pythonでハミング窓関数を作る(SciPy編)
- Pythonでブール値を数値に変換する
- Pythonでモジュールをインポートする
- Pythonで数値を比較する
- Pythonで文字の内容から真偽値の判定をする
- Pythonで自前の関数を定義する
- Pythonで論理演算する
- Pythonのprint関数で改行せずに出力する
- Pythonのプログラムを終了する
- Pythonの関数には参照を渡す
- Windows10 バージョン1703 Creators Update にPythonとSphinxをインストール
- Windwos10 バージョン1703 Creators Update にPythonとSphinxをインストール (Anaconda編)
- reStructuredTextの表
- ダウンロードしたファイルのチェックサムをPythonで確認してみた
- 反復処理 (while)
- 反復処理(for)
- 条件分岐
- 自作のモジュールをインポートする