Kato Ryo Official Site

抽象度とエネルギーを上げる

【Python】Pythonの変数(オブジェクト)の渡し方は共有渡し(参照値渡し)

 
この記事を書いている人 - WRITER -
Pocket

Pythonは、int型やstring型など、ただの変数に見えるものも含めて、すべてオブジェクトという扱いなので、引数の渡し方は、値渡しや参照渡しではなく、共有渡し(参照値渡し)になります。

 

共有渡しというのは、オブジェクトへの参照(≒オブジェクトのアドレス…そのオブジェクトが格納されているメモリ上の場所)を値として渡す、というものです。

 

ただ、実際の振る舞いを見ていると、値渡しに見えるものがあったり、参照渡しに見えるものがあったりします。この違いがどこから来るのかというと、ミュータブル(mutable)なオブジェクトと、イミュータブルなオブジェクト(immutable)という区分からです。

 

イミュータブルなオブジェクト(文字列、タプル、数値など)は、後から値を変更することができません。
例えば、関数やメソッドに実引数として数値型のインスタンス(≒オブジェクト)x が渡され、そのxの値を変更しようとすると、インスタンス x の値は変更できないため、新しいインスタンスが作成されます。

 

一方、ミュータブルなオブジェクト(リスト、ディクショナリ、セットなど)は、後から値を変更することが可能です。
この場合、関数やメソッドに実引数としてミュータブルなインスタンス x が渡され、その x の値を変更しようとすると、新しいインスタンスは作成されず、x の値そのものが書き換えられます。

この記事を書いている人 - WRITER -

- Comments -

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Copyright© 抽象度とエネルギーを上げる , 2018 All Rights Reserved.