[Python-Dev] Unexpected bytecode difference

Victor Stinner victor.stinner at gmail.com
Fri Jan 19 18:54:30 EST 2018


Python bytecode format changed deeply in Python 3.6. It now uses
regular units of 2 bytes, instead of 1 or 3 bytes depending if the
instruction has an argument.

See for example https://bugs.python.org/issue26647 "wordcode".

But CALL_FUNCTION bytecode also evolved.

Victor

2018-01-20 0:46 GMT+01:00 Alexander Belopolsky <alexander.belopolsky at gmail.com>:
> I have encountered the following difference between Python 3 and 2:
>
> (py3)
>>>> compile('xxx', '<>', 'eval').co_code
> b'e\x00S\x00'
>
> (py2)
>>>> compile('xxx', '<>', 'eval').co_code
> 'e\x00\x00S'
>
> Note that 'S' (the code for RETURN_VALUE) and a zero byte are swapped
> in Python 2 compared to Python 3.  Is this change documented
> somewhere?
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/victor.stinner%40gmail.com


More information about the Python-Dev mailing list