为什么list(my_list)修改了对象?

wim*_*wim 5 python string recursion list

我不小心碰到了这种奇怪的行为:

>>> a = []
>>> a[:] = ['potato', a]
>>> print a
['potato', [...]]
>>> print list(a)
['potato', ['potato', [...]]]
Run Code Online (Sandbox Code Playgroud)

通过什么机制调用list(a)在其自身的字符串表示中展开一级递归?

Bre*_*arn 5

...当项目包含本身只显示-也就是说,同一个对象. list(a)制作列表的副本,因此内部a不是同一个对象.它只显示它...何时到达"一个内部",而不是"一个内部list(a)".


kin*_*all 2

list()进行浅复制。外部列表不再是与其包含的列表相同的对象。它按照您的预期打印。