[Tutor] bytecode primer, and avoiding a monster download

eryksun eryksun at gmail.com
Tue May 28 20:06:10 CEST 2013


On Tue, May 28, 2013 at 1:58 PM, Oscar Benjamin
<oscar.j.benjamin at gmail.com> wrote:
>
> So what happens to the code object for the top-level code in the
> module itself when it is imported in the normal way? Is it just
> discarded once import is complete? Is it temporarily accessible during
> import?

Normally, nothing holds a reference to it, so it gets deallocated, as
do the anonymous functions used to build classes. However, in CPython
the current frame is accessible during import via sys._getframe(). The
code object is the f_code attribute:

    >>> code = compile(r'''
    ... import sys
    ... frame = sys._getframe()
    ... ''', '<test>', 'exec')
    >>>
    >>> ns = {}
    >>> exec code in ns
    >>> dis.dis(ns['frame'].f_code)
      2           0 LOAD_CONST               0 (0)
                  3 LOAD_CONST               1 (None)
                  6 IMPORT_NAME              0 (sys)
                  9 STORE_NAME               0 (sys)

      3          12 LOAD_NAME                0 (sys)
                 15 LOAD_ATTR                1 (_getframe)
                 18 CALL_FUNCTION            0
                 21 STORE_NAME               2 (frame)
                 24 LOAD_CONST               1 (None)
                 27 RETURN_VALUE


More information about the Tutor mailing list