On Sat, 16 Jun 2018 09:38:07 -0700, ip.bcrs wrote: > Hi everyone, > > I'm intrigued by the output of the following code, which was totally > contrary to my expectations. Can someone tell me what is happening? > >>>> myName = "Kevin" >>>> id(myName) > 47406848 >>>> id(myName[0]) > 36308576 >>>> id(myName[1]) > 2476000 > > I expected myName[0] to be located at the same memory location as the > myName variable itself.
Nothing in the above example tells you anything about memory locations (except by accident). The id() function does not return a memory address (except by accident). It returns an opaque integer ID code, that is all. If you try that on another Python interpreter, such as Jython or IronPython, you will see something like this: >>> sys.executable '/usr/bin/jython' >>> myName = "Kevin" >>> id(myName) 3 >>> id(myName[1]) 4 >>> id(myName[0]) 5 Notice that IDs are allocated sequentially, in the order you ask for them. > I also expected myName[1] to be located immediately after myName[0]. Why? Even if id() happens to return a memory address, the details of where Python allocates a new object is unpredictable. -- Steven D'Aprano "Ever since I learned about confirmation bias, I've been seeing it everywhere." -- Jon Ronson -- https://mail.python.org/mailman/listinfo/python-list