自引用列表

自引用列表,第1张

自引用列表

您什么都没看到:

>>> a = []>>> a[:] = [a] * 4>>> a[[...], [...], [...], [...]]

如果您对CPython在CPython中的工作方式感兴趣,请参阅

list_repr
in
listobject.c
和类似的函数。基本上,任何可能打印自引用对象的函数都会
Py_ReprEnter
在对象打印之前和
Py_ReprLeave
完成时调用该对象。(请参阅参考资料
object.c
,以获得这些函数的定义。)前者检查是否在当前正在打印的线程局部对象堆栈中找到了该对象(如果没有,则进行推送);后者从堆栈中d出对象。因此,如果Python正在打印一个列表并发现该列表在堆栈中,则必须表示这是一个自引用列表,并且该列表应缩写,以避免无限循环:

 i = Py_ReprEnter((PyObject*)v); if (i != 0) {     return i > 0 ? PyString_FromString("[...]") : NULL; } // ... Py_ReprLeave((PyObject *)v); return result;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5639859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存