Can a simple a==b 'hang' in and endless loop?

Steve Holden steve at holdenweb.com
Thu Jan 19 12:24:57 CET 2006


Claudio Grondi wrote:
> Steven D'Aprano wrote:
> 
>>Claudio Grondi wrote:
>>
>>
>>>Exactly this is what Python does under the hood when writing
>>>a = "some string"
>>>b = "some string"
>>>where a and b are actually, in terms of C, pointer to Python object 
>>>data structures which provide strings as arrays where it is possible 
>>>to say a[0], but ... if here
>>>if(a==b):
>>>  print "True"
>>>_does not_ print True, the Python engine is definitely broken.
>>
>>
>>
>>Why are you comparing C behaviour to Python behaviour? What is the point 
>>of the discussion?
> 
> 
> The point is to find a way to create in Python two indentifiers a and b 
> without manipulating any of the __eq__ and to __eq__ related functions 
> in a way, that the simple
>    if a==b: print 'a==b'
> statement results in an endless loop.
> To my knowledge this is not possible to achieve in C, but is probably 
> achievable in Python.
> 
So finally we understand what you are looking for (though not why ...).

  >>>
  >>> a = [1]
  >>> a.append(a)
  >>> a
[1, [...]]
  >>>
  >>> b = [1]
  >>> b.append(b)
  >>> a == b
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
RuntimeError: maximum recursion depth exceeded in cmp
  >>>

Is this what you seek? Not quite "an endless loop", but probably as 
close as you are going to get given the necessariliy recursive data 
structures required to induce it.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC                     www.holdenweb.com
PyCon TX 2006                  www.python.org/pycon/




More information about the Python-list mailing list