homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author serhiy.storchaka
Recipients alexandre.vassalotti, pitrou, serhiy.storchaka
Date 2014年11月02日.15:28:40
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1414942122.91.0.879577274082.issue22783@psf.upfronthosting.co.za>
In-reply-to
Content
Currently in pickle with protocol 4 the NEWOBJ_EX opcode is used to reconstruct objects with __getnewargs__() or __getnewargs_ex__() even if there no keyword arguments.
>>> import pickle, pickletools, collections
>>> P = collections.namedtuple('P', 'x y')
>>> pickletools.dis(pickle.dumps(P(12, 34), 3))
 0: \x80 PROTO 3
 2: c GLOBAL '__main__ P'
 14: q BINPUT 0
 16: K BININT1 12
 18: K BININT1 34
 20: \x86 TUPLE2
 21: q BINPUT 1
 23: \x81 NEWOBJ
 24: q BINPUT 2
 26: . STOP
highest protocol among opcodes = 2
>>> pickletools.dis(pickle.dumps(P(12, 34), 4))
 0: \x80 PROTO 4
 2: \x95 FRAME 28
 11: \x8c SHORT_BINUNICODE '__main__'
 21: \x94 MEMOIZE
 22: \x8c SHORT_BINUNICODE 'P'
 25: \x94 MEMOIZE
 26: \x93 STACK_GLOBAL
 27: \x94 MEMOIZE
 28: K BININT1 12
 30: K BININT1 34
 32: \x86 TUPLE2
 33: \x94 MEMOIZE
 34: } EMPTY_DICT
 35: \x94 MEMOIZE
 36: \x92 NEWOBJ_EX
 37: \x94 MEMOIZE
 38: . STOP
highest protocol among opcodes = 4
These EMPTY_DICT//MEMOIZE//NEWOBJ_EX can be replaced by single NEWOBJ. Actually there is a regression in protocol 4 against protocol 3, so may be following patch should be applied on 3.4 too.
Here is a patch which uses __newobj__ instead of __newobj_ex__ if there are no keywords arguments. Also it reduce the number of lines of C code and adds tests for classes with __getnewargs__() and __getnewargs_ex__().
History
Date User Action Args
2014年11月02日 15:28:43serhiy.storchakasetrecipients: + serhiy.storchaka, pitrou, alexandre.vassalotti
2014年11月02日 15:28:42serhiy.storchakasetmessageid: <1414942122.91.0.879577274082.issue22783@psf.upfronthosting.co.za>
2014年11月02日 15:28:42serhiy.storchakalinkissue22783 messages
2014年11月02日 15:28:42serhiy.storchakacreate

AltStyle によって変換されたページ (->オリジナル) /