Pythonの参照渡し
Pythonは全ての型が参照渡しになっています。
ただし、イミュータブルな型のものはデータが更新されると新たなメモリ領域を確保する仕組みになっています。
それは値渡しのような動きをします。
ミュータブルな型とイミュータブルな型
- ミュータブルな型:リスト型、辞書型、集合型
- イミュータブルな型:int型、float型、str型、タプル型など
イミュータブルなデータが更新されると新たなメモリ領域を確保して元の値は変更されません。
現在の値がどこに確保されているか確認するには、id()関数を使います。
id()関数はオブジェクトのid番号を調べることができます。
イミュータブルとはオブジェクトを変更できないことで、ミュータブルはオブジェクトを変更可能ということです。
オブジェクトの変更とオブジェクトを変数に割り当てることは別ものです。 Pythonでは変数はオブジェクトに付けられたラベルにすぎません。つまりオブジェクトを変数に割り当てるということは、名前を付けただけです。
もう少し言うとオブジェクトを参照しているだけです。
例えば、整数はint型でイミュータブルです。
- 変数に整数を代入すると、その整数の値に名前が付けられたことになります
- 同じ変数に違う値を代入すると、その値はイミュータブルなため変更は不可能です。そのためPythonは別の場所に新しい値を置き、変数は同じ名前で違う場所の値を参照するようになります
- id()でidを調べるとそれがわかります
次に、list型のミュータブルな値で同様のことをします。
- 変数にリストを代入すると、そのリストの値に名前が付けられたことになります
- 同じ変数に違う値を追加すると、その値はミュータブルなため変更は可能です。そのためPythonは同じ場所に新しい値を追加し、変数は同じ場所の値を参照するようになります
- id()でidを調べるとそれがわかります
コード例
# イミュータブルな例 num = 10 print(id(num),num) num2 = num print(id(num2),num2)
結果
10914784 10
10914784 10
# ミュータブルな例 l = [1,2,3] print(id(l),l) l2 = l print(id(l2),l2) l2.append(4) print(id(l),l) print(id(l2),l2)
結果
140016123693704 [1, 2, 3]
140016123693704 [1, 2, 3]
140016123693704 [1, 2, 3, 4]
140016123693704 [1, 2, 3, 4]
参考になった書籍
プログラミングを少しでも経験がありPython の文法を学習する場合は、「入門 Python 3」が良いと思います。長く使えます。
「退屈なことはPython にやらせよう」はオブジェクト指向の解説がないです。代わりにPythonを使った便利な実例が初心者には嬉しい内容です。正規表現から、簡単なスクレイピング 、画像操作などあります。ただし、中級者以上には少し物足りないかもしれません。
サンプルのダウンロード
ここでダウンロードする「reference1.ipynb」ファイルは、この動画で使用したものです。
Python入門一覧
- Python入門 クラスの継承とオーバーライド(動画あり)
- Python入門 オブジェクト指向について、クラスの作り方(動画あり)
- Python入門 lambda関数の使い方、map関数の使い方(動画あり)
- Python入門 位置引数、キーワード引数、デフォルト引数、便利な引数の使い方(動画あり)
- Python入門 グローバル変数とローカル変数(動画あり)
- Python入門 モジュールのインポートとrandomモジュール(動画あり)
- Python入門 関数の定義方法(動画あり)
- Python入門 内包表記(動画あり)
- Python入門 zip関数(動画あり)
- Python入門 for in文の活用(動画あり)
- Python入門 for in文の基本(動画あり)
- Python入門 三項演算子(動画あり)
- Python入門 if文の使い方2 while文の使い方(動画あり)
- Python入門 if文の使い方(動画あり)
- Python入門 浅いコピーと深いコピー(動画あり)
- Python入門 参照渡し(動画あり)
- Python入門 集合(動画あり)
- Python 入門 辞書(動画あり)
- Python 入門 タプルについて(動画あり)
- Python入門 リストのメソッド(動画あり)
- Python入門 リストのスライス(動画あり)
- Python入門 リスト
- Python入門 BMI課題 (動画あり)
- Python入門 文字列の連結とフォーマット1(動画あり)
- Python入門 文字列のフォーマット2(動画あり)
- Python入門 エスケープと型変換とinput()の使い方(動画あり)
- Python入門 pep8(動画あり)
- Python入門 変数の練習(動画あり)
- Python入門 変数(動画あり)
- Python入門 文字列(動画あり)
- Python入門 演算子(動画あり)
- Python入門 Python をはじめよう! (動画あり)
コメントを投稿するにはログインしてください。