Seemingly odd 'is' comparison.
Duncan Booth
duncan.booth at invalid.invalid
Tue Feb 19 08:52:04 EST 2008
Boris Borcic <bborcic at gmail.com> wrote:
> Arnaud Delobelle wrote:
>> Whereas when "3.0*1.0 is 3.0" is evaluated, *two* different float
>> objects are put on the stack and compared (LOAD_CONST 3 / LOAD_CONST
>> 1 / COMPARE_OP 8). Therefore the result is False.
>
> Looks good, but doesn't pass the sanity check ;) Consider
>
> >>> def f():
> return 3 is 3, 3*1 is 3
>
> >>> import dis
> >>> dis.dis(f)
> 2 0 LOAD_CONST 1 (3)
> 3 LOAD_CONST 1 (3)
> 6 COMPARE_OP 8 (is)
> 9 LOAD_CONST 3 (3)
> 12 LOAD_CONST 1 (3)
> 15 COMPARE_OP 8 (is)
> 18 BUILD_TUPLE 2
> 21 RETURN_VALUE
> >>> f()
> (True, True)
>
s/different/possibly different depending on implementation details/
Arnaud's point remains valid: in the first comparison you can see that the
same object is used, in the second case all bets are off.
More information about the Python-list
mailing list