递归引用自身内的列表

Guy*_*Guy 11 python list repr self-reference

所以我在python中遇到了一些非常奇怪的东西.我尝试将列表的引用添加到自身.代码可能有助于证明我所说的比我能表达的更好.我正在使用IDLE编辑器(交互模式).

>>>l=[1,2,3]
>>>l.append(l)
>>>print(l)
[1,2,3,[...]]
>>>del l[:-1]
>>>print(l)
[[...]]
Run Code Online (Sandbox Code Playgroud)

到目前为止,输出是预期的.但是当我这样做的时候.

y=l[:]
print(y)
Run Code Online (Sandbox Code Playgroud)

对我而言,似乎输出应该是

[[...]]
Run Code Online (Sandbox Code Playgroud)

但它是

[[[...]]]
Run Code Online (Sandbox Code Playgroud)

显然,它不是创建列表的副本,而是在y中引用列表.

y [0]是l返回True.我似乎无法找到一个很好的解释.有任何想法吗?

shx*_*hx2 8

区别仅在于列表的显示方式.即价值y正是您所期望的.

列表显示方式的不同源于这样一个事实l,y即不是自引用列表:

l[0] is l
=> True
y[0] is y
=> False
Run Code Online (Sandbox Code Playgroud)

y不是自我引用,因为y没有引用y.它引用l,这是自引用.

因此,将列表转换为字符串的逻辑在处理时会检测到更深层次的潜在无限递归y,而不是l.