うちのカレーにはこれが入ってる!って食材ありますか?

Pythonで、dir(オブジェクト)で表示される関数についてですが、
例えば数値オブジェクトは、immutableなオブジェクトなので、値が変わるたびに新たなオブジェクトが生成されますが、この場合、数値などの属性値は別として、そのオブジェクトが持っている関数などは共通に参照できるようにしてオブジェクトのメモリを減らすような工夫はされているのでしょうか?
それともオブジェクト毎に、関数もそれぞれ別の関数として生成されるのでしょうか?

A 回答 (2件)

Pythonでは、immutableなオブジェクト(例えば数値や文字列)に対して、値が変わるたびに新たなオブジェクトが生成されます。

しかし、そのオブジェクトが持っている関数は、共通に参照できるようになっています。

これは、関数がオブジェクトの属性として保存されるためです。オブジェクトが生成されると、そのクラスに定義された関数がそのオブジェクトの属性としてコピーされます。つまり、オブジェクトが変更されたとしても、そのクラスに定義された関数は変更されずに共通に参照できるようになっています。

ただし、オブジェクトごとに関数が新たに生成されることはありません。それぞれのオブジェクトが自分専用の関数を持っているわけではありません。関数はクラスに属しており、そのクラスを共有する全てのオブジェクトが同じ関数を参照します。
    • good
    • 0

これ実験してみると複雑そうです。


同じメソッドがオブジェクト毎に別の関数だったり
することがありますね。
#int の __add__ とか・・・
#インライン化された実装なのだろうか?

まあ、大体は同じになるようなので、
気にしなくて良いと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報