Monday, June 3, 2019

They say a python tuple can't contain itself...

... but here at PDW we abhor that kind of defeatism!

>>> import ctypes
>>> tup = (None,)
>>> ctypes.pythonapi.PyTuple_SetItem.argtypes = ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p
>>> ctypes.pythonapi.PyTuple_SetItem(id(tup), 0, id(tup))

Showing the tuple itself is a little problematic
>>> tup
# ... hundreds of lines of parens ...
((Segmentation fault


  1. This is not surprising, since C-API is actually used. Without it, making a tuple instance with a part of itself will not possible.

    1. yup! only the C-API makes it possible

      it is kind of interesting though that tuple doesn't have any recursion handling in its repr()

      >>> a = []
      >>> a.append((a,))
      >>> a
      >>> a[0]

      rather than tuple(list(tuple)) showing ([(...,)]) it relies on the list repr() to detect the cycle and handle it one layer deeper

      contract with dict(list(dict)) in which the dict repr() detects the cycle

      >>> b = {}
      >>> b[0] = [b]
      >>> b
      {0: [{...}]}

  2. Odd; not getting this error under ipython, though I do get it with plain python. Both should(?) be running the same python executable; at any rate both report running 2.7.15 (can't even try this in python3 it seems). But under ipython I just get ((...),) as one might expect.

  3. I have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog! 统计代写

  4. It was worthy experience to get some answers concerning hazardous complement. Valuable for everyone looking with respect to the issue.

    data scientist course in delhi

  5. I feel really happy to have seen your webpage and look forward to so many more entertaining times reading here. Thanks once more for all the details.
    business analytics course

  6. Hi there mates, how is all, and what you would like to say concerning this
    article, in my view its truly awesome in favor of me.

    Look at my web-site; 부산달리기

  7. I like reading the aforementioned essay because it clearly explains everything and is both entertaining and effective. Thank you for your time and consideration, and best of luck with your future articles.Medical Essay Writing Service