Farshid Lashkari wrote: > However, the following commands add to my confusion: > > >> a = 'wtf?' > >> b = 'wtf?' > >> a is b > False > > So how are string literals cached? Is there an explanation somewhere? Is > it some freaky voodoo, and I should just assume that a string literal > will always generate a new object?
A few comments (which I hope are correct, but which I hope you will read then mostly ignore since you probably shouldn't be designing based on this stuff anyway): 1. What you see at the interactive prompt is not necessarily what will happen in a compiled source file. Try the above test with and without the question mark both at the interactive prompt and in source and see. 2. The reason for the difference with ? is probably due to an optimization relating to looking up attribute names and such in dictionaries. wtf? is not a valid attribute, so it probably isn't optimized the same way. 2.5. I think I had a third comment like the above but after too little sleep last night it seems it's evaporated since I began writing... 3. As Steve or someone said, these things are implementation details unless spelled out explicitly in the language reference, so don't rely on them. 4. If you haven't already written your code and profiled and found it lacking in performance and proving that the cause is related to whether or not you hoisted the string literal out of the loop, you're wasting your time and this is a good opportunity to begin reprogramming your brain not to optimize prematurely. IMHO. FWIW. :-) -Peter -- http://mail.python.org/mailman/listinfo/python-list