ちょっと、Pythonのオブジェクト生成と、メモリ空間上のアドレスについて調べていたらすごいページを見つけたので、メモしておきます。
dis/inspect モジュールと ceval.c を使った Python のハッキング 親ページは、こっちです。 すごすぎて、詳しく読んでると、はまってしまいそうなのですが、ちょろっとそのエッセンスだけ。 idという組み込み関数を使うと、そのオブジェクトの実体が保存されているメモリ上のアドレスを得ることが出来ます。 >>> l = [1,2,3] >>> r = [1,2,3] >>> hex(id(l)) '0x74cfa8' >>> hex(id(r)) '0x74c800' hexで16進数表示にしています。同じオブジェクトですが、実体が違うことがわかります。 また、disモジュールのdisメソッドを使うと、引数の関数のPython仮想マシンコードが出力出来ます。 >>> import dis >>> f = lambda x : x ** 2 >>> f(2) 4 >>> dis.dis(f) 1 0 LOAD_FAST 0 (x) 3 LOAD_CONST 0 (2) 6 BINARY_POWER 7 RETURN_VALUE 面倒なので1行のlambda関数にしましたが、それっぽいコードが出てきます。 はまらない程度に楽しんでください。 大学初等の情報理論の教材には、いいかもしれません。 スポンサーサイト
|
|
| ホーム |
|