is implemented with id ?
Ramchandra Apte
maniandram01 at gmail.com
Wed Sep 5 08:48:26 EDT 2012
On Wednesday, 5 September 2012 14:44:23 UTC+5:30, Steven D'Aprano wrote:
> On Wed, 05 Sep 2012 08:30:31 +0200, Franck Ditter wrote:
>
>
>
> > Hi !
>
> > a is b <==> id(a) == id(b) in builtin classes. Is that true ?
>
>
>
> Not just for builtin classes, for any objects, provided that they are
>
Seeing this thread, I think the is statment should be removed.
It has a replacement syntax of id(x) == id(y) and "a==True" should be automatically changed into memory comparison.
> alive at the same time.
>
>
>
> There is no guarantee whether IDs will be re-used. Some versions of
>
> Python do re-use IDs, e.g. CPython:
>
>
>
> steve at runes:~$ python
>
> Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
>
> [GCC 4.4.5] on linux2
>
> Type "help", "copyright", "credits" or "license" for more information.
>
> >>> a = ["some", "object"]
>
> >>> id(a)
>
> 3074285228L
>
> >>> del a
>
> >>> b = [100, 200]
>
> >>> id(b)
>
> 3074285228L
>
>
>
> but others do not, e.g. Jython and IronPython:
>
>
>
> steve at runes:~$ jython
>
> Jython 2.5.1+ (Release_2_5_1, Aug 4 2010, 07:18:19)
>
> [OpenJDK Client VM (Sun Microsystems Inc.)] on java1.6.0_18
>
> Type "help", "copyright", "credits" or "license" for more information.
>
> >>> a = ["some", "object"]
>
> >>> id(a)
>
> 1
>
> >>> del a
>
> >>> b = [100, 200]
>
> >>> id(b)
>
> 2
>
>
>
>
>
> steve at runes:~$ ipy
>
> IronPython 2.6 Beta 2 DEBUG (2.6.0.20) on .NET 2.0.50727.1433
>
> Type "help", "copyright", "credits" or "license" for more information.
>
> >>> a = ["some", "object"]
>
> >>> id(a)
>
> 43
>
> >>> del a
>
> >>> b = [100, 200]
>
> >>> id(b)
>
> 44
>
>
>
>
>
> CPython especially has the most complicated behaviour with IDs and object
>
> identity:
>
>
>
> >>> a = 99.99
>
> >>> b = 99.99
>
> >>> a is b
>
> False
>
> >>> a = 99.99; b = 99.99; a is b
>
> True
>
>
>
>
>
> In general, you almost never need to care about IDs and object identity.
>
> The main exception is testing for None, which should always be written as:
>
>
>
> if x is None
>
>
>
>
>
> --
>
> Steven
More information about the Python-list
mailing list