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

Claudio Grondi claudio.grondi at freenet.de
Thu Jan 19 08:22:34 EST 2006


Steve Holden wrote:
> 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 ...).
I will intentionally not elaborate here about the why, as my experience 
with this thread has already shown, that this is not only not helpful in 
getting the answer to the actual question, but results in 'hiding' the 
goal to the reader which needs to be revealed as it gets lost in the 
explanation.
> 
>  >>>
>  >>> 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.
Wow! I haven't got this evil idea myself yet (even if as I understand 
there is no problem to achieve similar thing also in C), so I have 
learned a bit more about Python again. Am I right supposing, that this 
becomes possible because the .append() goes not that far to try to 
generate the actual list (getting trapped in the endless loop) and only 
lets the second list element point to the object with the list itself. 
The trouble with it becomes apparent later when working with such bad 
defined list as it is the case when applying the '==' operator to it.
Thank you for sharing this with me, but again ...

this is still _not_ what I am looking for, because Python detects here 
the problem and throws an exception. What I am looking for is an endless 
loop where there is no any response from Python about a problem.

Claudio



More information about the Python-list mailing list