gpt4 book ai didi

python - 自引用列表

转载 作者:行者123 更新时间:2023-11-28 19:49:43 30 4
gpt4 key购买 nike

假设您执行以下操作:

a = [1]
a[0] = a

您最终得到的 a 等于 [[...]]。这里发生了什么?这个隐式定义的 a 引用 a 的无限链如何最终成为 [[...]]

最佳答案

你什么都没看到:

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

如果您对其在 CPython 中的工作方式感兴趣,请参阅 list_repr in listobject.c和类似的功能。基本上,任何可能打印自引用对象的函数在打印之前调用对象上的 Py_ReprEnter 并在打印完成时调用 Py_ReprLeave。 (参见 object.c for the definitions of these functions。)前者检查是否在当前正在打印的线程本地对象堆栈中找到该对象(如果没有,则将其推送);后者从堆栈中弹出对象。因此,如果 Python 正在打印一个列表并发现该列表在堆栈上,那一定意味着这是一个自引用列表,并且该列表应该被缩写,以避免无限循环:

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

// ...

Py_ReprLeave((PyObject *)v);
return result;

关于python - 自引用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15849399/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com