Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #67522

Object identity (was: Reference)

From Ben Finney <ben+python@benfinney.id.au>
Subject Object identity (was: Reference)
Date 2014-03-03 21:00 +1100
References <53144e8d$0$2149$426a74cc@news.free.fr>
Newsgroups comp.lang.python
Message-ID <mailman.7632.1393840833.18130.python-list@python.org> (permalink)

Show all headers | View raw


"ast" <nomail@invalid.com> writes:

> >>> A=7
> >>> B=7
> >>> A is B
> True
>
> I understand that there is a single object 7 somewhere in memory and
> both variables A and B point toward this object 7

Try not to think in terms of “point to”. Rather, the names “A” and “B”
are bound to that object.

The distinction is subtle; but it's important to realise that *all*
references in Python do this, and there's no way to talk about an object
in Python without using a reference. The “pointer” model from other
languages doesn't exist in Python.

> now do the same with a list:
>
> >>> l1 = [1, 2]
> >>> l2 = [1, 2]
> >>> l1 is l2
> False
>
> It seems this time that there are 2 distincts objects [1, 2] in
> memory.

That's correct.

> I dont really understand why the behavior is different. Both integer 7
> and list [1, 2] are objects. Why is it different ?

Short answer: object identity is an implementation detail.

It's up to the Python implementation to decide when to re-use an object
when a new one is requested. No guarantee is made, when you ask to
create an object, that you won't get an existing one if that would work
just as well.

Since the integer object 7 is immutable, it will behave the same no
matter how many times you ask for a new one, the Python implementation
can choose to give you the same object. But it might not — don't depend
on this!

Since two separate lists are mutable, each one can have a distinct
history after creation, so it would be less helpful to return an
existing list when you ask for a new one. But again, there's no
guarantee here either! A Python implementation might decide to give you
an existing list, if existing guarantees can be kept.

The moral is: Don't depend on differences in object identity. You can be
guaranteed that an object will retain its own identity, and its identity
will always be different from all other co-existing objects that have
different values. Beyond that, don't make any assumptions.

-- 
 \              “Programs must be written for people to read, and only |
  `\        incidentally for machines to execute.” —Abelson & Sussman, |
_o__)              _Structure and Interpretation of Computer Programs_ |
Ben Finney

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Reference "ast" <nomail@invalid.com> - 2014-03-03 10:42 +0100
  Object identity (was: Reference) Ben Finney <ben+python@benfinney.id.au> - 2014-03-03 21:00 +1100
    Re: Object identity (was: Reference) "ast" <nomail@invalid.com> - 2014-03-03 11:21 +0100
  Re: Reference "Mark H. Harris" <harrismh777@gmail.com> - 2014-03-03 05:09 -0800
  Re: Reference Grant Edwards <invalid@invalid.invalid> - 2014-03-03 14:29 +0000
  Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-03 07:52 -0800
    Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-04 08:10 +1100
    Re: Reference Tim Chase <python.list@tim.thechases.com> - 2014-03-03 15:24 -0600
    Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-04 08:31 +1100
    Re: Reference Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-03-03 21:35 +0000
      Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-04 00:07 +0200
        Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-04 09:18 +1100
          Re: Reference Alister <alister.ware@ntlworld.com> - 2014-03-04 11:10 +0000
            Re: Reference Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-03-04 11:48 +0000
              Re: Reference "Rhodri James" <rhodri@wildebst.org.uk> - 2014-03-05 00:25 +0000
    Re: Reference Tim Chase <python.list@tim.thechases.com> - 2014-03-03 15:51 -0600
    Re: Reference Jerry Hill <malaclypse2@gmail.com> - 2014-03-03 17:02 -0500
      Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-04 00:22 +0200
        Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-04 09:27 +1100
        Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-04 09:33 +1100
        Re: Reference Steven D'Aprano <steve@pearwood.info> - 2014-03-04 04:52 +0000
          Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-04 16:24 +1100
            Re: Reference "Rhodri James" <rhodri@wildebst.org.uk> - 2014-03-05 01:08 +0000
              Re: Reference Roy Smith <roy@panix.com> - 2014-03-04 21:09 -0500
                Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-04 19:36 -0800
                Re: Reference Ian Kelly <ian.g.kelly@gmail.com> - 2014-03-04 21:08 -0700
                Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-04 20:31 -0800
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-05 15:32 +1100
                Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-04 20:47 -0800
                Re: Reference Steven D'Aprano <steve@pearwood.info> - 2014-03-05 05:06 +0000
                Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-04 21:47 -0800
                Re: Reference alex23 <wuwei23@gmail.com> - 2014-03-05 16:01 +1000
                Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-04 22:10 -0800
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-05 17:22 +1100
                Re: Reference alex23 <wuwei23@gmail.com> - 2014-03-05 16:28 +1000
                Re: Reference Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-03-05 12:24 +0000
                Re: Reference Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-03-05 12:21 +0000
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-05 17:20 +1100
                Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-05 09:40 -0800
                Re: Reference Tim Chase <python.list@tim.thechases.com> - 2014-03-05 12:12 -0600
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-06 05:33 +1100
                Re: Reference Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-03-05 18:19 +0000
                Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-05 22:23 +0200
                Re: Reference Grant Edwards <invalid@invalid.invalid> - 2014-03-05 20:31 +0000
                Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-05 22:46 +0200
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-06 08:07 +1100
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-06 08:10 +1100
                Re: Reference Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-03-05 21:34 +0000
                Re: Reference Terry Reedy <tjreedy@udel.edu> - 2014-03-05 18:00 -0500
                Re: Reference Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-03-06 03:01 +0000
                Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-04 22:03 -0800
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-05 17:26 +1100
                Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-05 17:32 +1100
                Re: Reference Tim Chase <python.list@tim.thechases.com> - 2014-03-05 08:24 -0600
                Re: Reference Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-03-05 18:29 +0000
                Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-05 22:34 +0200
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-06 08:01 +1100
                Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-05 23:14 +0200
                Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-06 08:26 +1100
                Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-05 23:50 +0200
                Re: Reference Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-03-06 00:35 +0000
                Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-06 11:50 +1100
                Re: Reference Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-03-06 17:46 +0000
                Re: Reference Tim Chase <python.list@tim.thechases.com> - 2014-03-05 15:33 -0600
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-06 08:37 +1100
                Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-06 02:52 +0200
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-06 12:05 +1100
                Re: Reference alex23 <wuwei23@gmail.com> - 2014-03-06 12:12 +1000
                Re: Reference Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-03-05 21:46 +0000
                Re: Reference Marko Rauhamaa <marko@pacujo.net> - 2014-03-05 08:23 +0200
                Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-04 22:33 -0800
                Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-05 17:40 +1100
                Re: Reference Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-03-05 12:35 +0000
                Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-05 23:45 +1100
          Re: Reference Jerry Hill <malaclypse2@gmail.com> - 2014-03-04 10:19 -0500
            Re: Reference Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-03-04 15:42 +0000
              Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-05 03:02 +1100
                Re: Reference Roy Smith <roy@panix.com> - 2014-03-04 11:14 -0500
              Re: Reference MRAB <python@mrabarnett.plus.com> - 2014-03-04 17:12 +0000
            Re: Reference Rustom Mody <rustompmody@gmail.com> - 2014-03-04 08:24 -0800
          Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-05 02:25 +1100
          Re: Reference Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2014-03-05 14:37 +0100
      Re: Reference Steven D'Aprano <steve@pearwood.info> - 2014-03-04 03:59 +0000
    Re: Reference Ben Finney <ben+python@benfinney.id.au> - 2014-03-04 09:17 +1100
      Re: Reference Roy Smith <roy@panix.com> - 2014-03-03 18:02 -0500
        Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-04 10:09 +1100
        Re: Reference Steven D'Aprano <steve@pearwood.info> - 2014-03-04 04:38 +0000
  Re: Reference Terry Reedy <tjreedy@udel.edu> - 2014-03-03 13:48 -0500
    Re: Reference Steven D'Aprano <steve@pearwood.info> - 2014-03-04 03:45 +0000
    Re: Reference Alexander Blinne <news@blinne.net> - 2014-03-04 13:55 +0100
      Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-05 01:06 +1100
        Re: Reference Alexander Blinne <news@blinne.net> - 2014-03-04 22:53 +0100
          Re: Reference Chris Angelico <rosuav@gmail.com> - 2014-03-05 09:01 +1100

csiph-web