Eryk Sun <[email protected]> added the comment:
The CPython interpreter doesn't centrally cache and reuse float objects, and
even if it did that would be an implementation detail, like what it does with
small int objects and strings.
What you're seeing at the module level is a compilation side effect. The
compiler is free to reuse immutable constants in a code object. For example:
>>> code = compile('af=1.1\nbf=1.1', '', 'exec')
>>> dis.dis(code)
1 0 LOAD_CONST 0 (1.1)
2 STORE_NAME 0 (af)
2 4 LOAD_CONST 0 (1.1)
6 STORE_NAME 1 (bf)
8 LOAD_CONST 1 (None)
10 RETURN_VALUE
In the above case, both af and bf are initialized with the same `1.1` constant
float object, which is at index 0 of the code object's tuple of constants:
>>> code.co_consts
(1.1, None)
But if we run `af=1.1` and `bf=1.1` as separate statements in the REPL shell,
the statements are compiled separately, and af and bf won't necessarily
reference the same float object.
Don't expect two immutable objects that have the same value to be the same
object -- unless it's a singleton such as `None` and `Ellipsis`:
>>> type(None)() is None
True
>>> type(Ellipsis)() is Ellipsis
True
Or an n-way extension of this case, such as bool in Python 3:
>>> bool(0) is False
True
>>> bool(1) is True
True
The consequences of immutability on object identity are discussed briefly in
the final paragraph of "3.1 Objects, values, and types" [1]. Offhand, I don't
know where the specific implementation details of CPython builtin immutable
types and compiler behavior are discussed, if it's discussed at all.
[1] https://docs.python.org/3/reference/datamodel.html#objects-values-and-types
----------
nosy: +eryksun
resolution: -> not a bug
stage: -> resolved
status: open -> closed
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue37728>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com