为什么Python要扩展输出[…]

为什么Python要扩展输出[…],python,list,python-3.x,Python,List,Python 3.x,我的讲师提出了几个关于python的问题,这个问题让我感到困惑,我不明白发生了什么 x = [[]] x[0].extend(x) Python告诉我,在运行这个命令之后,x是[[…]],那么..是什么意思 当以下结果只是[[]] y = [] # equivalent to x[0] x = [[]] y.extend(x) 如果y被计算为[[]]那么x不应该被计算为仅仅是[[[]] 你在干什么?..是什么意思?这个..表示列表包含一个递归循环,也就是说,在某种程度上,某个东西包含了它自己

我的讲师提出了几个关于python的问题,这个问题让我感到困惑,我不明白发生了什么

x = [[]]
x[0].extend(x)
Python告诉我,在运行这个命令之后,x是
[[…]]
,那么
..
是什么意思

当以下结果只是
[[]]

y = [] # equivalent to x[0]
x = [[]]
y.extend(x)
如果
y
被计算为
[[]]
那么
x
不应该被计算为仅仅是
[[[]]


你在干什么?
..
是什么意思?

这个
..
表示列表包含一个递归循环,也就是说,在某种程度上,某个东西包含了它自己。这是因为您使用
x
扩展了
x
,因此本质上是将
x
放在其内部


第二个示例中没有
,因为
y
是一个不同的对象。虽然它恰好等于
x[0]
,因为两者都是空列表,但它们不是相同的空列表。

因此,通过使用
x
扩展
x[0]
,它在
x[0]
处创建对
x
的引用,而不是将
x
包含的数据复制到
x[0]
?是吗?@CGA1123:基本上是的。(更具体地说,它是在
x[0]
的列表中创建对
x[0]
的引用,因为
extend
添加的是它的参数的内容,而不是参数本身。但您是对的,它是在创建对同一对象的引用,而不是复制数据,这是关键。)因为
x
引用自身,
str(x)
是一个无限循环。蟒蛇捕捉到它真是太好了。