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

时间:2013-11-01 19:22:34

标签: python string list recursion

我偶然发生了这种奇怪的行为:

>>> a = []
>>> a[:] = ['potato', a]
>>> print a
['potato', [...]]
>>> print list(a)
['potato', ['potato', [...]]]

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

2 个答案:

答案 0 :(得分:5)

...仅在项目包含自身时显示 - 即同一个对象。 list(a)制作列表的副本,因此内部a不是同一个对象。它只显示...到达“a inside a”,而不是“in list(a)”。

答案 1 :(得分:2)

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